1

有什么方法可以替换__mro__Python 为类创建的默认属性?我想要一个由我制作的不同的解决方案。现在,当我尝试分配某些东西时,__mro__我得到一个“只读属性”异常。

4

1 回答 1

0

我找到了一种方法来更改对象的类或重写它的 mro:

def upgrade_class(obj, old_class, new_class):
    if obj.__class__ is old_class:
        obj.__class__ = new_class
    else:
        mro = obj.__class__.mro()

        def replace(cls):
            if cls is old_class:
                return new_class
            else:
                return cls

        bases = tuple(map(replace, mro[1:]))
        old_base_class = obj.__class__
        new_class = type(old_base_class.__name__, bases, dict(old_base_class.__dict__))
        obj.__class__ = new_class
于 2019-09-06T10:13:21.937 回答