Python class definition syntax

Is there a difference between

class A:
    ...

and

class A():
    ...

I just realized that a couple of my classes are defined as the former and they work just fine. Do the empty parenthesis make any difference?


Solution 1:

While it might not be syntactically incorrect to use the empty parentheses in a class definition, parentheses after a class definition are used to indicate inheritance, e.g:

class A(baseClass):
    ...

In Python, the preferred syntax for a class declaration without any base classes is simply:

class A:
    ...

Don't use parentheses unless you are subclassing other classes.

The docs on the matter should give you a better understanding of how to declare and use classes in Python.

Solution 2:

The latter is a syntax error on older versions of Python. In Python 2.x you should derive from object whenever possible though, since several useful features are only available with new-style classes (deriving from object is optional in Python 3.x, since new-style classes are the default there).