有没有办法在Python类中更改__mro__?

时间:2014-05-09 18:09:44

标签: python python-3.x method-resolution-order

有没有办法替换Python为类创建的默认__mro__属性?我希望有一个不同的我为了解决而制作的。 现在,当我尝试将某些内容分配给__mro__时,我得到一个"只读属性"异常。

1 个答案:

答案 0 :(得分: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