Python Default Inheritance?

2019-06-16 10:52发布

If I define a class in Python such as:

class AClass:
   __slots__ = ['a', 'b', 'c']

Which class does it inherit from? It doesn't seem to inherit from object.

4条回答
倾城 Initia
2楼-- · 2019-06-16 11:06

If you define a class and don't declare any specific parent, the class becomes a "classic class", which behaves a bit differently than "new-style classes" inherited from object. See here for more details: http://docs.python.org/release/2.5.2/ref/node33.html

Classic classes don't have a common root, so essentially, your AClass doesn't inherit from any class.

Note that this is specific to Python versions before 3.0. In Python 3, all classes are new-style classes and inherit implicitly from object, if no other parent is declared.

查看更多
我只想做你的唯一
3楼-- · 2019-06-16 11:14

Try the following code snippet in Python 2.7 and Python 3.1

class AClass:
   __slots__ = ['a', 'b', 'c']
print(type(AClass))
print(issubclass(AClass,object))
print(isinstance(AClass,type))

In Python 2.7, you will get:

<type 'classobj'>
False
False

And Python 3.1 you will get.

<class type>
True
True

And that explains it all. It is old style class in Python 2, unless you subclass it from object. Only in Python3, it will be treated like a new style class by default.

查看更多
成全新的幸福
4楼-- · 2019-06-16 11:25

Let's try it out.

>>> class AClass:
...     pass
... 
>>> AClass.__bases__, type(AClass)
( (), <type 'classobj'> )                # inherits from nothing

>>> class AClass(object):                # new style inherits from object
...     pass
... 
>>> AClass.__bases__, type(AClass)
( (<type 'object'>,), <type 'type'> )

Read an introduction to the new style classes in the links given in other answers.

查看更多
Ridiculous、
5楼-- · 2019-06-16 11:25

In Python 2.x or older, your example AClass is an "old-style" class.

A "new-style" class has a defined inheritance and must inherit from object or some other class.

What is the difference between old style and new style classes in Python?

EDIT: Wow, I didn't think it was possible to use the old-style syntax in Python 3.x. But I just tried it and that syntax still works. But you get a new-style class.

查看更多
登录 后发表回答