> class A(object): pas-6ren">
gpt4 book ai didi

python - "mro()"有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 21:05:35 25 4
gpt4 key购买 nike

mro() 是什么意思?怎么办?


示例来自 django.utils.functional :

for t in type(res).mro():  # <----- this
if t in self.__dispatch:
return self.__dispatch[t][funcname](res, *args, **kw)

最佳答案

跟随...:

>>> class A(object): pass
...
>>> A.__mro__
(<class '__main__.A'>, <type 'object'>)
>>> class B(A): pass
...
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
>>> class C(A): pass
...
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <type 'object'>)
>>>

只要我们有单继承,__mro__ 只是以下的元组:类、它的基类、它的基类的基类,等等直到 object(仅当然适用于新式类(class))。

现在,多重继承...:

>>> class D(B, C): pass
...
>>> D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)

...您还可以得到保证,在 __mro__ 中,没有类是重复的,也没有类在其祖先之后,保存首先进入相同级别的多重继承的类(如本例中的 B 和 C)在 __mro__ 从左到右。

你在一个类的实例上获得的每个属性,不仅仅是方法,在概念上都是沿着 __mro__ 查找的,所以,如果祖先中有多个类定义了该名称,这会告诉你在哪里将在定义该名称的 __mro__ 的第一个类中找到属性。

关于python - "mro()"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com