【发布时间】:2013-11-11 21:01:31
【问题描述】:
我在使用__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__ 不是在做什么?
【问题讨论】:
标签: python abc method-resolution-order