我在使用__metaclass__ = abc.ABCMeta
时偶然发现了这个额外的、没有下划线的mro
方法。它似乎与__mro__
相同,只是它返回一个列表而不是元组。下面是一个随机的例子(ideone snippet):
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__
不是吗?在
直接来自the documentation:
对我来说是不言而喻的。。。在
在实例化时调用
mro()
,并将其结果存储在__mro__
中。他们的目的并不相同。在相关问题 更多 >
编程相关推荐