有没有办法改变Python类中的mro?

有没有办法改变Python类中的mro?,python,python-3.x,method-resolution-order,Python,Python 3.x,Method Resolution Order,是否有任何方法可以替换Python为类创建的默认属性\uuu\mro\uu?为了解决这个问题,我想换一个。 现在,当我尝试将某些内容分配给\uuu mro\uuu时,我得到一个“只读属性”异常。我找到了一种方法来更改对象的类或重写它的mro: def升级级(obj、旧级、新级): 如果对象类别为旧类别: 对象类=新类 其他: mro=obj.\uuuuu类\uuuuuu.mro() def更换(cls): 如果cls为旧类: 返回新的\u类 其他: 返回cls base=tuple(map(re

是否有任何方法可以替换Python为类创建的默认属性
\uuu\mro\uu
?为了解决这个问题,我想换一个。
现在,当我尝试将某些内容分配给
\uuu mro\uuu
时,我得到一个“只读属性”异常。

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

def升级级(obj、旧级、新级):
如果对象类别为旧类别:
对象类=新类
其他:
mro=obj.\uuuuu类\uuuuuu.mro()
def更换(cls):
如果cls为旧类:
返回新的\u类
其他:
返回cls
base=tuple(map(replace,mro[1:]))
旧的基本类=对象类__
新类=类型(旧类、基本类、名称、基本类、目录(旧类、基本类、目录))
对象类=新类

您不能直接更改它。通常,如果您想要一个不同的MRO,您可以定义一个新类,该类按照您想要的顺序从其他类继承。你能详细说明你想要实现什么以及为什么吗?一个具有自定义
\uuuu getattribute\uuuu
的元类可以使用它自己的方法解析顺序来进行普通的属性查找,但是对于特殊的方法查找它不会做任何事情。最好的解决方法可能是从一个不需要您这样做的方向来处理问题。为什么要更改MRO?这似乎是一个坏主意,可能会导致非常混乱、难以调试的代码。你到底想用这个做什么?在飞行中?不可以。但是您可以通过重写元类的属性来定制MRO。