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