我偶然发现了这个额外的、无下划线的mro
我使用时的方法__metaclass__ = abc.ABCMeta
。似乎是一样的__mro__
只是它返回一个列表而不是元组。这是一个随机示例(创意片段):
import abc
import copy
class Life(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def reproduce(self):
pass
class Bacterium(Life):
def reproduce(self):
return copy.deepcopy(self)
wiggly = Bacterium()
print wiggly.__class__.__mro__
# (<class '__main__.Bacterium'>, <class '__main__.Life'>, <type 'object'>)
print wiggly.__class__.mro()
# [<class '__main__.Bacterium'>, <class '__main__.Life'>, <type 'object'>]
后来我发现这并不是独一无二的ABCMeta
但在所有新式课程中都可用。
所以为什么?这是做什么的__mro__
isn't?
直接来自文档:
此方法可以由元类重写,以自定义其实例的方法解析顺序。它在类实例化时调用,其结果存储在_mro_.
So, mro()
在实例化时调用并将其结果缓存在__mro__
。他们实际上没有相同的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)