139 votes

Syntaxe de définition des classes Python

Y a-t-il une différence entre

class A:
    ...

y

class A():
    ...

Je viens de réaliser que plusieurs de mes classes sont définies comme telles et qu'elles fonctionnent parfaitement. Les parenthèses vides font-elles une différence ?

139voto

Rafe Kettler Points 29389

Bien qu'il ne soit pas 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 ex :

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.

Le site documents sur le sujet devrait vous permettre de mieux comprendre comment déclarer et utiliser les classes en Python.

30voto

Ignacio Vazquez-Abrams Points 312628

Cette dernière est une erreur de syntaxe sur les anciennes versions de Python. Dans Python 2.x, vous devez dériver de object dans la mesure du possible, car plusieurs fonctions utiles ne sont disponibles qu'avec l'option des classes d'un nouveau genre (dérivé de object est facultative dans Python 3.x, puisque les classes de type nouveau sont utilisées par défaut).

10 votes

Ce n'est plus vrai dans python 3 ; tout ce qui dérive de object Les bêtises sont prises en charge automatiquement.

4 votes

Était class A() jamais une erreur de syntaxe ? Le site Documentation sur Python 1.4 disent que c'est bon, et ce sont les plus anciennes docs encore disponibles sur python.org.

1voto

Mitt Points 31

Une définition de classe est un peu différente d'une définition de fonction/méthode.

Les parenthèses dans les définitions de classe servent à définir de quelle classe vous héritez. Vous n'écrivez pas def devant, et lorsque vous héritez de 'object', qui est la classe par défaut, vous n'avez pas besoin des parenthèses pour la définition.

Vous pouvez donc écrire l'un ou l'autre :

class C():

Ou :

class C:

Les définitions de fonctions/méthodes prennent toujours des parenthèses, même si vous ne définissez pas de paramètres. Si vous ne les utilisez pas, vous obtiendrez une SyntaxError.

Plus tard, après la définition d'une classe/fonction/méthode dans le code, le simple fait d'écrire le nom vous indiquera la classe/fonction/méthode.

Si vous voulez appeler ou accéder à l'un de ces éléments, vous aurez besoin de (), [], . ou autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X