覆盖__class__会引发TypeError

问题描述 投票:2回答:1

我试图通过从该类派生并覆盖/添加某些方法*来扩展用C编写的模块类的功能。

问题是他的模块创建了我试图在不同地方扩展的类的实例。因此,我需要创建一个转换方法,将模块提供的基类强制转换为我自己的派生类,并具有附加功能。

这是我尝试过的:

class Derived(Base):
    @classmethod
    def cast(cls, obj: Base):
        obj.__class__ = cls

这个方法适用于我自己创建的类层次结构 - 但它使用我使用的模块失败,抛出以下异常:

TypeError:__class__赋值仅支持堆类型或ModuleType子类

我很难找到有关此例外的官方信息。任何信息都有帮助,我甚至会接受hackish解决方案,只要它们干净并完全模仿我想要的行为。

*我试图扩展的类是包Surface中的pygame

python python-3.x casting typeerror python-internals
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.