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