Wenn ich die Klassendefinitionen class Foo:
sehe, sehe ich oft, dass sie mit Großbuchstaben beginnen.
Aber ist nicht eine Liste []
oder ein dict {}
oder ein anderer eingebauter Typ, eine Klasse? Alles was in Pythons IDLE eingegeben wurde, ist ein Schlüsselwort, das automatisch in lila (mit der Binärdistribution des Fensters) coloriert wird, ist selbst eine Klasse, richtig?
Wie spam = list()
spam
ist jetzt eine Instanz von list()
Meine Frage ist also, warum erlaubt uns Python zuallererst etwas wie list = list()
zu tun, wenn niemand das tut. Aber warum ist es nicht list = List()
Entschlossen sich die Entwickler der Sprache, keine Konvention zu verwenden, obwohl die meisten Python-Programmierer ihre Klassen als solche bezeichnen?
Ja, Großbuchstaben - Anfangsklassen sind die Konvention, wie in PEP 8 .
Sie haben Recht, dass viele eingebaute Typen dieser Konvention nicht folgen. Dies sind Überbleibsel aus früheren Phasen von Python, als es einen viel größeren Unterschied zwischen benutzerdefinierten Klassen und eingebauten Typen gab. Es scheint jedoch immer noch, dass in C geschriebene Built-in- oder Extension-Typen eher Kleinbuchstaben haben (z. B. numpy.array
, nicht numpy.Array
).
Nichtsdestotrotz besteht die Konvention darin, Großbuchstaben-Initiale für Ihre eigenen Klassen in Python-Code zu verwenden.
PEP8 ist der richtige Ort für den Code-Stil.
Um Ihre Frage zu beantworten, warum list = list()
gültig ist, ist list
einfach ein Name im globalen Namespace und kann wie jede andere Variable überschrieben werden.
Ich denke, dass die einzige Person, die wirklich die vollständige Antwort auf Ihre Frage kennt, der BDFL . Konvention außerhalb der in C implementierten Typen ist definitiv die Verwendung von Großbuchstaben (wie in PEP8 beschrieben). Es ist jedoch interessant festzustellen, dass nicht alle C-Level-Typen der Konvention folgen (d. H.% Co_de%, Py_True
) nicht. Ja, sie sind Konstanten auf Python-Ebene, aber sie sind alle Py_False
s. Ich wäre neugierig zu wissen, ob das der einzige Unterschied und damit der Unterschied in der Konvention ist.
Nach PEP 8 gibt es eine Reihe von Richtlinien für Python-Entwickler:
Klassennamen verwenden fast ausnahmslos die CapWords-Konvention. Klassen für den internen Gebrauch haben zusätzlich einen führenden Unterstrich.
PEP 8 richtet sich an die Python-Entwicklung für die Standardbibliothek in der Haupt-Python-Distribution, aber sie sind sinnvolle Richtlinien, die zu befolgen sind.
Alle sind am Ende Design-Entscheidungen.
[...] Warum erlaubt uns Python vor allem etwas wie
?list = list()
Ссылка sagt
Und das wäre ein Sonderfall.
[...] warum ist es nicht
list = List()
Ссылка sagt:
Klassennamen
Klassennamen sollten normalerweise die CapWords-Konvention verwenden.
Die Namenskonvention für Funktionen kann stattdessen in Fällen verwendet werden, in denen die Schnittstelle wird dokumentiert und primär als Callable genutzt.
Beachten Sie, dass es eine separate Konvention für eingebaute Namen gibt: die meisten eingebaute Namen sind einzelne Wörter (oder zwei Wörter laufen zusammen), mit der CapWords-Konvention, die nur für Ausnahmebedingungsnamen und Builtins verwendet wird Konstanten. [Betonung meiner]
Alle anderen Klassen sollten die CapWorlds-Konvention verwenden. Da list
, object
usw. eingebaute Namen sind, folgen sie dieser separaten Konvention .
Tags und Links python coding-style naming-conventions