class_docstr: Base class for drawing pens. You must override _moveTo, _lineTo and
  _curveToOne. You may additionally override _closePath, _endPath,
  addComponent, addVarComponent, and/or _qCurveToOne. You should not
  override any other methods.
code: def curveTo(self, *points):
      n = len(points) - 1  # 'n' is the number of control points
      assert n >= 0
      if n == 2:
          # The common case, we have exactly two BCP's, so this is a standard
          # cubic bezier. Even though decomposeSuperBezierSegment() handles
          # this case just fine, we special-case it anyway since it's so
          # common.
          self._curveToOne(*points)
          self.__currentPoint = points[-1]
      elif n > 2:
          # n is the number of control points; split curve into n-1 cubic
          # bezier segments. The algorithm used here is inspired by NURB
          # splines and the TrueType "implied point" principle, and ensures
          # the smoothest possible connection between two curve segments,
          # with no disruption in the curvature. It is practical since it
          # allows one to construct multiple bezier segments with a much
          # smaller amount of points.
          _curveToOne = self._curveToOne
          for pt1, pt2, pt3 in decomposeSuperBezierSegment(points):
              _curveToOne(pt1, pt2, pt3)
              self.__currentPoint = pt3
      elif n == 1:
          self.qCurveTo(*points)
      elif n == 0:
          self.lineTo(points[0])
      else:
          raise AssertionError("can't get there from here")
  
imports: from typing import Tuple, Dict
  from fontTools.misc.loggingTools import LogMixin
  from fontTools.misc.transform import DecomposedTransform
label_desc: Use image node_id 13 for calling the BasePen obj's underlying member method code with example usage: obj.curveTo() without return types