Wenn die Konvention in Python ist, Klassen zu aktivieren, warum wird list () dann nicht großgeschrieben? Ist es nicht eine Klasse?

9

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?

    
Leonardo 20.02.2013, 06:55
quelle

5 Antworten

17

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.

    
BrenBarn 20.02.2013, 06:59
quelle
2

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.

    
Volatility 20.02.2013 06:58
quelle
1

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.

    
Demian Brecht 20.02.2013 06:56
quelle
0

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.

    
Michael Foukarakis 20.02.2013 06:58
quelle
0

Alle sind am Ende Design-Entscheidungen.

  
    

[...] Warum erlaubt uns Python vor allem etwas wie list = list()

?   

Ссылка sagt

  • Einfach ist besser als komplex.
  • Sonderfälle sind nicht speziell genug, um die Regeln zu brechen.

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 .

    
serv-inc 15.10.2017 09:12
quelle