我试图通过从该类派生并覆盖/添加某些方法*来扩展用C编写的模块类的功能。
问题是他的模块创建了我试图在不同地方扩展的类的实例。因此,我需要创建一个转换方法,将模块提供的基类强制转换为我自己的派生类,并具有附加功能。
这是我尝试过的:
class Derived(Base):
@classmethod
def cast(cls, obj: Base):
obj.__class__ = cls
这个方法适用于我自己创建的类层次结构 - 但它使用我使用的模块失败,抛出以下异常:
TypeError:__class__赋值仅支持堆类型或ModuleType子类
我很难找到有关此例外的官方信息。任何信息都有帮助,我甚至会接受hackish解决方案,只要它们干净并完全模仿我想要的行为。
*我试图扩展的类是包Surface
中的pygame
。