Syntaxe de définition de classe Python

90

Y a-t-il une différence entre

class A:
    ...

et

class A():
    ...

Je viens de réaliser que quelques-uns de mes cours sont définis comme les premiers et qu'ils fonctionnent très bien. Les parenthèses vides font-elles une différence?

Falmarri
la source

Réponses:

22

Ce dernier est une erreur de syntaxe sur les anciennes versions de Python. Dans Python 2.x, vous devriez dériver de objectchaque fois que possible, car plusieurs fonctionnalités utiles ne sont disponibles qu'avec les classes de nouveau style (dériver de objectest facultatif dans Python 3.x, car les classes de nouveau style sont la valeur par défaut).

Ignacio Vazquez-Abrams
la source
7
Ce n'est plus vrai en python 3; tout ce qui dérive du objectnon-sens est pris en charge automatiquement.
temporary_user_name
4
Y a-t-il class A()déjà eu une erreur de syntaxe? Les documents Python 1.4 disent que tout va bien, et ce sont les documents les plus anciens encore disponibles sur python.org.
user2357112 prend en charge Monica le
86

Bien qu'il puisse ne pas être syntaxiquement incorrect d'utiliser les parenthèses vides dans une définition de classe, les parenthèses après une définition de classe sont utilisées pour indiquer l'héritage, par exemple:

class A(baseClass):
    ...

En Python, la syntaxe préférée pour une déclaration de classe sans aucune classe de base est simplement:

class A:
    ...

N'utilisez pas de parenthèses à moins que vous ne sous-classiez d'autres classes.

La documentation sur le sujet devrait vous donner une meilleure compréhension de la façon de déclarer et d'utiliser des classes en Python.

Rafe Kettler
la source