为什么没有继承对象的python 2.7定义类就没有 __mro__方法?

why python 2.7 define class without inheriting object would not have __mro__ method?

本问题已经有最佳答案,请猛点这里访问。

我正在用Python2.7.9开发MacOSXyosemite。

以下是我的尝试:

  • 定义一个类

    1
    2
    3
    class A:
        def test(self):
            print"test"

    然后运行

    1
    A.__mro__

    然后我得到了

    1
    2
    3
    4
    >>> A.__mro__
    Traceback (most recent call last):
      File"<stdin>", line 1, in <module>
    AttributeError: class A has no attribute '__mro__'
  • 然后我定义

    1
    2
    3
    class B(object):
        def test(self):
            print"test"

    然后运行

    1
    B.__mro__

    然后我得到了

    1
    2
    >>> B.__mro__
    (<class '__main__.B'>, <type 'object'>)
  • 这两种定义有什么不同?我发现在python3中,没有"object"的版本仍然有__mro__方法。


    __mro__仅为新样式类定义。在python 2中,类只有从object继承(或从内置类型继承,后者反过来从object)继承时才是新样式的,而python 3中的所有类无论什么都是新样式的。


    __mro__仅为新样式类(继承自python object的类)定义。

    在python 3中,所有类都是新样式的类。他们含蓄地继承了以东的遗产。换句话说,已经从语言中删除了旧式的python 2类。