有办法修改Python类中的__mro__吗?

2 投票
1 回答
1227 浏览
提问于 2025-04-18 06:01

有没有办法替换掉Python为一个类自动生成的__mro__属性?我想自己创建一个不同的,以便于解决问题。现在,当我尝试给__mro__赋值时,系统会报“只读属性”的错误。

1 个回答

2

我找到了一种方法,可以改变一个对象的类或者重写它的类继承顺序(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

撰写回答