1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# mode: run
PYTHON setup.py build_ext --inplace
PYTHON main.py
######## moda.pyx ########
cpdef mod_name():
return "mod A"
cdef class ClassA:
cpdef class_name(self):
return "Class A"
cdef class ClassB(ClassA):
cpdef class_name(self):
return "Class B"
######## modb.pyx ########
import moda
cpdef mod_name_override():
return "I was overridden"
moda.mod_name = mod_name_override
######## setup.py ########
from setuptools import setup
from Cython.Build import cythonize
import Cython.Compiler.Options
Cython.Compiler.Options.lookup_module_cpdef = True
setup(
ext_modules = cythonize(["moda.pyx", "modb.pyx"],
compiler_directives={'language_level': 3})
)
######## main.py ########
import moda, modb
assert moda.mod_name() == "I was overridden"
assert moda.mod_name == modb.mod_name_override
assert moda.ClassA.class_name != moda.ClassB.class_name
|