30 votes

Si la convention en Python est de mettre les classes en majuscules, pourquoi alors list() n'est pas en majuscules ? N'est-ce pas une classe ?

Souvent, quand je vois des définitions de classe class Foo: je les vois toujours commencer par des lettres majuscules.

Cependant, n'est-ce pas une liste [] ou un dict {} ou un autre type intégré, une classe également ? D'ailleurs, tout ce qui est tapé dans l'IDLE de Python, qui est un mot-clé automatiquement codé en violet (avec la distribution binaire de Window), est lui-même une classe, non ?

Par exemple spam = list()

spam est maintenant une instance d'un list()

Ma question est donc la suivante : pourquoi Python nous permet-il d'abord de faire quelque chose comme list = list() alors que personne, probablement, ne le fait. Mais aussi, pourquoi n'est-ce pas list = List()

Les développeurs du langage ont-ils décidé de ne pas utiliser de convention, alors que la plupart des programmeurs Python nomment leurs classes comme telles ?

42voto

BrenBarn Points 63718

Oui, les classes initiales en majuscules sont la convention, comme indiqué dans le document suivant PEP 8 .

Vous avez raison de dire que de nombreux types intégrés ne respectent pas cette convention. Ce sont des vestiges des premiers stades de Python, lorsqu'il y avait une différence beaucoup plus grande entre les classes définies par l'utilisateur et les types intégrés. Cependant, il semble toujours que les types builtin ou d'extension écrits en C sont plus susceptibles d'avoir des noms en minuscules (par exemple, numpy.array pas numpy.Array ).

Néanmoins, la convention est d'utiliser la majuscule initiale pour vos propres classes dans le code Python.

3voto

Volatility Points 12668

PEP8 est l'endroit où aller pour le style de code.

Pour répondre à votre question sur le pourquoi list = list() est valable, list est simplement un nom dans l'espace de nom global, et peut être surchargée comme n'importe quelle autre variable.

2voto

Demian Brecht Points 11083

Je pense que la seule personne qui vraiment sait que la réponse entière à votre question est la BDFL . La convention en dehors des types implémentés en C est définitivement d'utiliser les majuscules (comme détaillé dans PEP8). Cependant, il est intéressant de noter que les types non tous Les types de niveau C suivent la convention (i.e. Py_True , Py_False ) ne le font pas. Oui, ce sont des constantes au niveau de Python, mais elles sont toutes PyTypeObject s. Je serais curieux de savoir si c'est la seule distinction et, par conséquent, la différence de convention.

2voto

user1587329 Points 91

Toutes ces décisions sont en fin de compte des décisions de conception.

[...] pourquoi python nous permet-il de faire tout d'abord quelque chose comme list = list()

https://www.python.org/dev/peps/pep-0020/ dit (essayez aussi >>> import this )

  • La simplicité est préférable à la complexité.
  • Les cas particuliers ne sont pas assez particuliers pour enfreindre les règles.

Et ce serait un cas particulier.

[...] pourquoi n'est-il pas list = List()

https://www.python.org/dev/peps/pep-0008/#class-names dit :

Noms des classes

Les noms des classes doivent normalement utiliser la convention CapWords.

La convention de dénomination des fonctions peut être utilisée à la place dans les cas où l'interface est documentée et utilisée principalement en tant qu'appelable.

Notez qu'il existe une convention distincte pour les noms de modules intégrés : la plupart des noms de modules intégrés sont des noms simples. sont des mots simples (ou deux mots accolés), avec la convention convention CapWords n'est utilisée que pour les noms d'exception et les constantes constantes. [souligné par moi]

Toutes les autres classes doivent utiliser la convention CapWorlds. Comme list , object etc. sont des noms intégrés, ils suivent cette règle convention séparée .

0voto

Michael Foukarakis Points 14892

Selon PEP 8 , un bel ensemble de directives pour les développeurs Python :

Presque sans exception, les noms de classe utilisent la convention CapWords. Les classes à usage interne ont en plus un trait de soulignement en tête.

Le PEP 8 est destiné au développement de Python pour la bibliothèque standard de la distribution principale de Python, mais ce sont des directives judicieuses à suivre.

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