python-sfml icon indicating copy to clipboard operation
python-sfml copied to clipboard

Use the abc module to fake inheritance

Open intjelic opened this issue 11 years ago • 1 comments

The abc module allows to override isinstance() and issubclass(), and that's what we need to solve our illogical inheritance trees. Reminder: RenderWindow doesn't inherit from both Window and RenderTarget because both are native classes (written in C++).

But it seems that in Cython overriding __metaclass__ has no effect so I asked on the mail list for the Cython equivalent of :

from abc import ABCMeta

class MyABC:
    __metaclass__ = ABCMeta

MyABC.register(tuple)

assert issubclass(tuple, MyABC)
assert isinstance((), MyABC)

https://groups.google.com/forum/#!topic/cython-users/zXroGWufF4U

Once solved, you'll get the following output.

w = sf.RenderWindow(...)
isinstance(w, sf.RenderTarget) # true
issubclass(w, sf.RenderTarge) # true

Same for our transformable drawables which inherit from sf.Drawable and not sf.Transformable.

intjelic avatar Aug 22 '13 10:08 intjelic

From the linked thread:

Right, metaclasses are supported for normal python classes only. cdef classes are pretty special with a number of restrictions compared to normal classes.

Not so promising :-( Should we investigate alternatives?

AphonicChaos avatar Jun 29 '14 07:06 AphonicChaos