Reputation: 28621
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
.
Upvotes: 11
Views: 8141
Reputation: 76715
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.
Upvotes: 2
Reputation: 56861
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.
Upvotes: 10
Reputation: 131667
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.
Upvotes: 2
Reputation: 24802
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.
Upvotes: 15