> class A(object): pass ... >>> A.__mro-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:23:10 24 4
gpt4 key购买 nike

django.utils.functional.py :

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

我不明白 mro() .它有什么作用,“mro”是什么意思?

最佳答案

跟着...:

>>> 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 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/64969202/

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