Python-Klassendefinitionssyntax

90

Gibt es einen Unterschied zwischen

class A:
    ...

und

class A():
    ...

Ich habe gerade festgestellt, dass einige meiner Klassen als die ersteren definiert sind und gut funktionieren. Macht die leere Klammer einen Unterschied?

Falmarri
quelle

Antworten:

22

Letzteres ist ein Syntaxfehler bei älteren Versionen von Python. In Python 2.x sollten Sie jedoch nach Möglichkeit ableiten object, da einige nützliche Funktionen nur für Klassen neuen Stils verfügbar sind (das Ableiten von objectist in Python 3.x optional, da dort Klassen neuen Stils die Standardeinstellung sind).

Ignacio Vazquez-Abrams
quelle
7
Nicht mehr wahr in Python 3; Alles, was aus objectUnsinn entsteht, wird automatisch erledigt.
temporärer_Benutzername
4
War class A()jemals ein Syntaxfehler? Die Python 1.4-Dokumente sagen, dass es in Ordnung ist, und dies sind die ältesten Dokumente, die noch auf python.org verfügbar sind.
user2357112 unterstützt Monica
86

Während es möglicherweise nicht syntaktisch falsch ist, die leeren Klammern in einer Klassendefinition zu verwenden, werden Klammern nach einer Klassendefinition verwendet, um die Vererbung anzuzeigen, z.

class A(baseClass):
    ...

In Python lautet die bevorzugte Syntax für eine Klassendeklaration ohne Basisklassen einfach:

class A:
    ...

Verwenden Sie keine Klammern, es sei denn, Sie unterordnen andere Klassen.

Die Dokumente zu diesem Thema sollen Ihnen ein besseres Verständnis dafür vermitteln, wie Klassen in Python deklariert und verwendet werden.

Rafe Kettler
quelle