类的mro方法和属性有什么区别?

2024-05-14 20:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用__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__不是吗?在


Tags: importselfobjectmaindefclassmetaclassabc
1条回答
网友
1楼 · 发布于 2024-05-14 20:46:31

直接来自the documentation

This method can be overridden by a metaclass to customize the method resolution order for its instances. It is called at class instantiation, and its result is stored in __mro__.

对我来说是不言而喻的。。。在

在实例化时调用mro(),并将其结果存储在__mro__中。他们的目的并不相同。在

相关问题 更多 >

    热门问题