One of the great features of Python is the ability to define methods outside of classes. For example, we can define a function which increments the attribute x
and add it to a Point
class:
def incx(self): self.x += 1 class Point(object): def __init__(self, x): self.x = x incx = incx
We can then create a point at the origin and increment x
:
In [2]: p = Point(0) In [3]: p.incx() In [4]: print p.x 1
The same code which defines Point
continues to work if we move incx
to another file, say demo.py
, and import it using from demo import incx
.
But if we were to put incx
in demo.pyx
and compile it (using python setup.py build_ext --inplace
), we get a strange error when running our simple test:
$ python bad.py Traceback (most recent call last): File "bad.py", line 10, in <module> p.incx() TypeError: incx() takes exactly one argument (0 given)
Read on to learn about instance methods and see how I fixed this.
Continue reading Instance Methods & Cython Functions