164

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?

3 Answers 3

158

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.

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

Comments

36

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).

2 Comments

No longer true in python 3; all that deriving from object nonsense is taken care of automatically.
Was class A() ever a syntax error? The Python 1.4 docs say it's fine, and those are the oldest docs still available on python.org.
6

A class definition is a bit different from a function/method definition.

The parentheses in class definitions are for defining from which class you inherit. You don't write def in front of it, and when you inherit from 'object' which is the default you don't need the parentheses for the definition.

So you can write either:

class C():

Or:

class C:

Function/method definitions always take parentheses, even if you don't define parameters. If you don't use them, you'll get a SyntaxError.

Later, after the definition of a class/function/method in the code, just writing the name will point you to the class/function/method.

If you want to call or access any of these, you'll need (), [], . or whatever.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.