Python class definition syntax

Question:

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?

Asked By: Falmarri

||

Answers:

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

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.

Answered By: Rafe Kettler

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.

Answered By: Mitt
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.