I am currently learning how to write Python (v3.5) extension modules using the Python C API. Some operations, like fast numerical work, are best done in C, while other operations, like string manipulation, are far easier to implement in Python. Is there an agreed-upon way to use both Python and C code to define a new type?
For example, I've written a Matrix
type in C that supports basic storage and arithmetic operations. I want to define the Matrix.__str__
using Python, where string manipulations are much easier and I don't need to worry about cstrings.
I attempted to define the __str__
method when the module loads in __init__.py
as follows:
from mymodule._mymodule import Matrix;
def as_str(self):
print("This is a matrix!");
Matrix.__str__ = as_str;
When I run this code, I get a TypeError: can't set attributes of built-in/extension type 'matey.Matrix'
. Is there an acceptable way to do this? If the solution is to subclass Matrix
instead, what is the best way to keep my C base classes / Python subclasses organized within a module?