- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
> class A(object): pas-6ren">
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/
在 Python 中的大多数类型/类中,我可以调用不带参数的 .mro()。但不是 type 及其后代: In [32]: type(4).mro() Out[32]: [int, object] I
在 django.utils.functional.py : for t in type(res).mro(): # >> class A(object): pass ... >>> A.__mro
假设我们正在实现一个元类,它需要在类被实例化之前知道方法解析顺序。 class Meta(type): def __new__(cls, name, bases, namespace):
为什么搜索完B之后不去更深的搜索Y OR z而是去搜索A呢? Y 是 A 的父级,如果应该先搜索 A,但是 Y 是 B 的父级所以它应该先搜索 Y,为什么这不会抛出 MRO 错误? 谁能解释一下这个查
class First(object): def __init__(self): print("first") class Second(First): def __i
Python in a Nutshell (2nd Edition)一书中有一个例子,它使用 旧样式类,用于演示如何以经典解析顺序解析方法和 新订单有什么不同。 我通过用新样式重写示例来尝试相同的示例
mro() 是什么意思?怎么办? 示例来自 django.utils.functional : for t in type(res).mro(): # >> class A(object): pas
class parent: def fun1(self): print("foo") fun2 = fun1 class child(parent): def
我将如何创建一个由多个基类/mixin 组成的类的扁平表示。有做这种事的图书馆吗?例如: class Foo(object): def a(self): return clas
我有这段代码,其中使用了超继承和多重继承。类的结果是: go A go! go C go! go B go! go D go! 虽然我希望: go A go! go B go! go D go! 根据
问题描述:我有一个类 C 继承自 mixin A 和 B。我想要一个新类 C_,它具有类 C 中定义的所有方法/属性,但 B 与 B_ mixin,选择了 B_ 的定义。 目前它有效,但我觉得:“祈祷
我发现自己处于一种不寻常的情况,我需要在运行时更改类的 MRO。 代码: class A(object): def __init__(self): print self.__c
这个问题在这里已经有了答案: Why is this an ambiguous MRO? (3 个回答) 关闭4年前。 这是我计划用于我的游戏的代码,但它提示 MRO 错误: class Player
我试图了解 abc.ABCMeta 的方法寄存器的用处。据我了解,阅读https://docs.python.org/3/library/abc.html后: 以下代码: class MyFoo(Co
我找到了一个多重继承的示例,但不明白它的行为方式。 class Printable: """A mixin class for creating a __str__ method that p
通过 add_to_class() 添加字段时,我的模型继承存在问题。 我有一个模型 File(models.Model)和 Image(File) - 这些来自 django-filer。 在我的应
在关于 Python webpage 的文档中python 中经典类的方法解析顺序被描述为深度优先的从左到右搜索。我试图用这段代码对此进行测试: class A(object): def __init
我是 MRO 的新手,在弄清楚这些输出的逻辑时遇到了问题。 情况1: class A(object): def save(self): print "A" class B(A):
class Base(object): def m(self): print 'base' class MixinA(Base): def m(self):
当我使用 __metaclass__ = abc.ABCMeta 时,我偶然发现了这个额外的、没有下划线的 mro 方法。它似乎与 __mro__ 相同,只是它返回的是列表而不是元组。这是一个随机示例
我是一名优秀的程序员,十分优秀!