157

Why do some Python classes have an object parameter that's never explicitly used?

Example:

class Table(object)
1

6 Answers 6

152

In Python2 this declares Table to be a new-style class (as opposed to "classic" class). In Python3 all classes are new-style classes, so this is no longer necessary.

New style classes have a few special attributes that classic classes lack.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Also, properties and super do not work with classic classes.

In Python2 it is a good idea to make all classes new-style classes. (Though a lot of classes in the standard library are still classic classes, for the sake of backward-compatibility.)

In general, in a statement such as

class Foo(Base1, Base2):

Foo is being declared as a class inheriting from base classes Base1 and Base2.

object is the mother of all classes in Python. It is a new-style class, so inheriting from object makes Table a new-style class.

Sign up to request clarification or add additional context in comments.

3 Comments

can you redirect me to a source that mentions object is not necessary as parameter in Python3? I cannot seem to find it. Thank you
It's been mentioned many times on StackOverflow (here, for instance), but I haven't been able to find a simple declaration of this in the docs. It is shown implicitly (by the omission of object from the list of class bases) in the tutorial.
The Python3 docs also state that a "new-style class" is the "old name for the flavor of classes now used for all class objects" (my emphasis). And the Python2 docs state that a "new-style class" is any class which inherits from object. The two statements put together imply that you don't need to include object in the list of class bases in Python3 since all classes are new-style classes in Python3.
38

The Table class is extending a class called object. It's not an argument. The reason you may want to extend object explicitly is it turns the class into a new-style class. If you don't explicitly specify it extends object, until Python 3, it will default to being an old-style class. (Since Python 3, all classes are new-style, whether you explicitly extend object or not.)

For more information on new-style and old-style classes, please see this question.

3 Comments

This is the more straightforward and succinct answer. Thanks.
Good and precise answer.
Can we say, we don't need to declare object when initializing classes?
4

class Table and class Table(object) are no different for Python.

It's not a parameter, its extending from object (which is base Class like many other languages).

All it says is that it inherits whatever is defined in "object". This is the default behaviour.

1 Comment

Classes automatically extending object is default behaviour in Python 3 only. In python 2, a class extending object has attributes that a class that doesn't extend object will not have.
3

Just a note that the “new-style" vs “old-style” class distinction is specific to Python 2.x; in 3.x, all classes are “new-style”.

Comments

2

object is the most base type of class object defined in python. Attributes of object can be seen as below

**>>> dir(object)

['class', 'delattr', 'doc', 'format', 'getattribute', 'hash', 'init', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook']**

So Table(object) is just inheritance.!

Comments

0

1)Class name (object): 2) class name: They both are same but first one quite better in terms of writing,it look better while inheriting other classes to another,i t looks homogeneous.

How same ? So,every thing in Python is come under object means every thing in Python has property of object,if write or don't it will understand it. In first we explicitly tell it in second we didn't.

1 Comment

This is not the case in Python 2, see accepted answer for the details.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.