【发布时间】:2018-09-02 20:32:15
【问题描述】:
我正在尝试通过从该类派生并覆盖/添加某些方法*来扩展用 C 编写的模块类的功能。
问题是他的模块创建了我试图在不同地方扩展的类的实例。因此,我需要创建一个转换方法,将模块提供的基类转换为我自己的具有附加功能的派生类。
这是我尝试过的:
class Derived(Base):
@classmethod
def cast(cls, obj: Base):
obj.__class__ = cls
此方法适用于我自己创建的类层次结构 - 但是它在我使用的模块中失败,引发以下异常:
TypeError: __class__ 分配仅支持堆类型或 ModuleType 子类
我很难找到有关此异常的官方信息。任何信息都有帮助,我什至会接受 hacky 解决方案,只要它们是干净的并且完全模仿我正在寻找的行为。
* 我要扩展的类是 Surface 包内的 pygame。
【问题讨论】:
标签: python python-3.x casting typeerror python-internals