* Python-Style-Guide
* enthält Empfehlungen wie Code geschrieben werden sollte
* für offizielle Python-Module ist es verpflichtend
====== Source File Encoding ======
* Encoding sollte bei Python 3 UTF-8
* bei Python 2 ASCII sein
* Encoding sollte nicht angegeben werden
====== Tabs oder Spaces für Einrücken ======
* im Speziellen seit Python3 wichtig, da es keine Vermischung erlaubt
* ein Intend sind 4 Spaces
* also wird jedes Indention-Level vom nächst höheren durch 4 Spaces unterschieden
* Editoren erlauben über Tab-Width u.ä. Einstellungen Tabs in eine bestimmte Menge Spaces umzuwandeln
====== Zeilenlänge =======
* 79 Zeichen
* maximal 100 Zeichen
* 72 für Nicht-Code
* Sinn ist das man Editor-Fenster nebeneinander auf haben kann
===== Zeilenumbruch =====
* Bei **Funktionsaufrufen**
* Fortsetzung geht auf Höhe der öffnenden Klammer
foo = long_function_name(var_one, var_two,
var_three, var_four)
* Hinter der öffnenden Klammer kommen keine Parameter, sondern in der ersten darauf folgend Zeile
* die Zeile muss weiter eingerückt sein als das höchste Indention-Level
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
* **Ausdrücke** können im Klammern gesetzt werden und dann umgebrochen werden - entsprechend Funktionsaufrufen
if (something
and something else):
====== Leerzeilen ======
* Vor und hinter einer Top-Level-Methode oder einer Klassendefinition zwei Zeilen
* Vor und hinter einer Methode in einer Klasse eine Zeile
====== import ======
* jeder import sollte eine eigene Zeile sein
====== Module Level Dunders ======
* Dunders sind doppelte Unterstriche in Python
* in der Moduldefinition sollten sie kommen:
* unter dem Doc-String des Moduls
* aber bevor irgendetwas relevantes passiert
====== Anführungszeichen ======
* Generell egal ob einfache oder doppelte benutzt
* nur für Doc-Strings (Markierung Beginn und Ende) sind doppelte Anführungszeichen vorgeschrieben
====== Leerzeichen ======
Fälle in denen Leerzeichen genutzt werden:
* vor und hinter Operatoren
* +, -, = usw.
* and, or
* <>
* is, is not, in, not in
* Hinter Doppelpunkten die eine Anweisung abschließen
* Vor und hinter dem = bei Variablenzuweisungen
* Hinter Komma die Parameter (zum Beispiel in einem Funktionsaufruf) trenne
Wo keine stehen sollten:
* Vor Semikolons, Doppelpunkten, Komma
* Hinter Klammern (egal ob Rund oder Eckig)
* Hinter Komma die Parameter trennen, wenn hinter dem Komma kein Parameter kommt (weil er ausgelassen wird)
* zwischen Variable und Index
* Zwischen Methodennamen und öffnender Klammer
====== Kommentare ======
* Komplette Sätze
* Beginnen mit # gefolgt von einem Leerzeichen
* Beginnend mit Großbuchstaben (ausnahme Variablen)
* Blockkommentare liegen auf dem gleichen Level mit dem Code den sie kommentieren
* Paragraphen in zusammenhängenden Multi-Line-Kommentaren sind eine Zeile mit nur einem #
* Inline-Kommentare (also am Ende der Zeile) sollten mindestens 2 Spaces vom Code entfernt sein + # + Leerzeichen
====== Docstrings ======
* Beginnen mit """ + gefolgt von erster Zeile Text
* Die Ausführenden """ sollten unterhalb der letzten Zeile stehen (also auf einer seperaten Zeile)
======= Unterstriche ======
* Ein führender Unterstrich
* "private" Objekte - es gibt keinen technischen Schutz außer das sie bei from import * nicht importiert werden
* Ein Unterstrich am Ende
* zur Vermeidung von Namenskollisionen mit Python-Buildins
* Zwei führende Unterstriche
* Name-Mangling - beim Vererben wird der Klassenname aus dem die Methode/das Attribut stammt vorangestellt -> vermeidet kollisionen/ungewolltes überschreiben
* Zwei führende Unterstriche und zwei nachfolgende
* Magic-Method
====== Namen ======
===== Zu vermeidende Namen =====
* Kleines el (da Verwechslung mit mit groß I und 1), O (da verwechselbar mit 0) und I (groß ieh, da verwechselbar mit 1 und kleinem l)
* jeweils wenn sie als Einzelvariablennamen genutzt werden sollen
===== Packages und Module =====
* Module
* kleingeschrieben, ggf. Unterschtriche
* Packages
* kleingeschrieben, keine Unterstriche
===== Klassennamen =====
* alle Wörter im Namen beginnen mit Großbuchstaben
* bsp. BrownCat
===== Exceptions =====
* entsprechend Klassen
* aber Name sollte mit Error starten wenn es sich um einen Error handelt
===== Methoden, Funktionen und Variablen =====
* alles kleingeschrieben
* soweit nötig sollten Wörter per Underscore getrennt sein
===== Konstanten =====
* Alles Großgeschrieben (also komplett)
* Unterstriche wenn nötig