Python默认继承?

Ver*_*gen 10 python inheritance class

如果我在Python中定义一个类,例如:

class AClass:
   __slots__ = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

它继承了哪个类?它似乎没有继承object.

sha*_*ang 13

如果定义一个类而不声明任何特定的父类,则该类将成为"经典类",其行为与从对象继承的"新样式类"略有不同.有关更多详细信息,请参见此处:http://docs.python.org/release/2.5.2/ref/node33.html

经典类没有公共根,因此基本上,您的AClass不会从任何类继承.

请注意,这是特定于3.0之前的Python版本.在Python 3中,如果没有声明其他父级,则所有类都是新式类并从对象隐式继承.


Sen*_*ran 8

在Python 2.7和Python 3.1中尝试以下代码片段

class AClass:
   __slots__ = ['a', 'b', 'c']
print(type(AClass))
print(issubclass(AClass,object))
print(isinstance(AClass,type))
Run Code Online (Sandbox Code Playgroud)

在Python 2.7中,您将获得:

<type 'classobj'>
False
False
Run Code Online (Sandbox Code Playgroud)

你会得到Python 3.1.

<class type>
True
True
Run Code Online (Sandbox Code Playgroud)

这解释了一切.它是Python 2中的旧样式类,除非您从中继承它object.仅在Python3中,默认情况下它将被视为新的样式类.