Bezeichner-Konventionen (Identifier) (C) 2017-2025 T.Birnthaler OSTC GmbH
====================================
Doku --> docs.python.org/dev/peps/pep-0008
www.pep8.org
docs.python.org/3/reference/lexical_analysis.html
docs.python.org/3/reference/lexical_analysis.html#keywords
docs.python.org/3/reference/lexical_analysis.html#identifiers-and-keywords
docs.python.org/3/reference/grammar.html
BEZEICHNER (IDENTIFIER) in Python gehorchen den üblichen Regeln in jeder
Programmiersprache:
* Ab 1. Zeichenposition BUCHSTABEN "A-Z" "a-z" und "_" erlaubt
* Ab 2. Zeichenposition ZIFFERN "0-9" zusätzlich erlaubt
* Außer UNTERSTRICH "_" keine Sonderzeichen (z.B. Operatoren + - * /) erlaubt
* LEERZEICHEN nicht erlaubt (Unterstrich "_" dient als Ersatz)
Besonderheiten von Python:
* GROSS/kleinschreibung wird unterschieden
(da unter UNIX/Linux üblich und Python dort entstanden ist)
* Punkt "." dient zum Strukturieren von "Qualifizierten" Namen
(d.h. dem Zugriff auf Namen in anderen Namensräumen)
* Beim "import" von Modul-Dateien wird der Punkt "." in einen
Verzeichnis-Trenner (je nach Betriebssystem "\", "/", ":") umgesetzt
* MODULNAMEN sind gleichzeitig auch Bezeichner von NAMENSRÄUMEN!
--> DÜRFEN keine Sonderzeichen/Leerzeichen/... enthalten
(am Besten nur "a-z" und "_" sowie "0-9" ab dem 2. Zeichen!)
--> Aus Portabilitätsgründen auch auf GROSS/kleinschreibung verzichten
(nur klein schreiben)
Empfehlung:
* UNICODE-Buchstaben sind zwar erlaubt (z.B. Umlaute "äöüÄÖÜ" und "ß" und
griechische/kyrillische Buchstaben, chinesische Schriftzeichen, ...)
--> Wegen Portabilität/internationaler Verständlichkeit darauf verzichten!
Folgende KONVENTIONEN für Bezeichner (Identifier) gelten in Python (siehe PEP8):
+-----------+------------------------------------------------------------------+
| NAME | BEDEUTUNG |
+-----------+------------------------------------------------------------------+
| __xxx__ | INTERNER Name ("dunder name", reserviert für Python selbst) |
+-----------+------------------------------------------------------------------+
| __xxx | PRIVATE Name in Klasse/Objekt (mangled --> _CLASS__xxx) |
| _xxx | PROTECTED Name in Klasse/Objekt (im Zshg. mit Vererbung nutzbar) |
| xxx | PUBLIC Name in Klasse/Objekt (für alle von außen nutzbar) |
+-----------+------------------------------------------------------------------+
| self | Objekt in normaler Methode (1. Standard-Parameter) |
| other | Zweites Objekt in 2-wertiger normaler Methode (z.B. "__eq__") |
| cls | Klasse in Klassen-Methode (1. Standard-Parameter) |
+-----------+------------------------------------------------------------------+
| _xxx | INTERNER Name in MODUL (nur für modulinterne Zwecke gedacht) |
| __xxx | --> Von "from MODULE import *" nicht importiert (private) |
| | --> Hilfsklasse, Hilfsfunktion, Hilfsvariable, ... |
| xxx_ | Schlüsselwort als Bezeichner nutzen (z.B. "if_", "for_", ...) | Builtin-Funktion
+-----------+------------------------------------------------------------------+
| *_ | "Wegwerf-Variable" (sammelt überflüssige Werte) |
| _ | "Wegwerf-Variable" (syntaktisch notwendig, inhaltlich irrelevant)|
| _ | Internationalisierung (i18n, l10n, gettext) |
| _ | Ergebnis letzte Auswertung im interaktiven Interpreter ">>>" |
+-----------+------------------------------------------------------------------+
| *args | Sammelt restliche POSITIONS-PARAMETER in Funktion (--> Tupel) |
| **kwargs | Sammelt restliche KEYWORD-PARAMETER in Funktion (--> Dictionary) |
+-----------+-------------------+------------------------------+---------------+
| XXX | Konstante | TrumpCase Unterstrich Ziffer | Subst Adj -- |
| Xxx | Klasse/Datentyp | CamelCase -- Ziffer | Subst Adj -- |
| XxxError | Exception | CamelCase -- Ziffer | Subst -- -- |
| xxx | Modul | SmallCase -- Ziffer | Subst -- -- |
| xxx_... | Variable/Attribut | SnakeCase Unterstrich Ziffer | Subst -- -- |
| xxx_... | Funktion/Methode | SnakeCase Unterstrich Ziffer | -- -- Verb|
| xxx_... | Objekt/Instanz | SnakeCase Unterstrich Ziffer | Subst -- -- |
+-----------+-------------------+------------------------------+---------------+
| NAME | BEDEUTUNG | REGEL + ERLAUBTE ZEICHEN | WORTART |
+-----------+-------------------+------------------------------+---------------+
camelCase = EINZELNE Großbst. (zur Strukturierung) + KEIN Unterstrich +
klein-Bbst. + Ziffern (1. Zeichen klein)
PascalCase = Analog camelCase (1. Zeichen GROSS statt klein)
kebap-case = Bindestrich "-" statt Unterstrich "_" + NUR klein-Bst
(in Python nicht möglich)
TRUMPCASE = NUR GROSS-Bst + Ziffern + KEIN Unterstrich
SCREAMING_SNAKE_CASE = Analog TRUMPCASE + Unterstrich (zur Strukturierung)
smallcase = NUR klein-Bst + Ziffern + KEIN Unterstrich
snake_case = NUR klein-Bst + Ziffern + Unterstrich (zur Strukturierung)
Title Case = 1. Bbst. jedes Wortes GROSS + Rest klein + Leerzeichen als Trennzeichen
(in Python nicht möglich)
Train-Case = 1. Bbst. jedes Wortes GROSS + Rest klein + Bindestrich "-" statt Unterstrich "_"
(in Python nicht möglich)
Sentence case = Analog Title Case (nur 1. Bst. weniger Worte GROSS)
(in Python nicht möglich)
HINWEIS: Aus historischen Gründen gibt es AUSNAHMEN bei Konstanten-Benennung:
(z.B. True, False, None, math.pi, math.e, math.inf, math.nan, ...)
Ebenso bei der Datentyp/Klassen-Benennung:
(z.B. bool, int, float, complex, str, tuple, list, set, dict, ...)
QUALIFIZIERTE Namen werden durch "." getrennt (der "." wird beim Zugriff auf
das Dateisystem in den jeweiligen Verz.-Trenner "\" oder "/" umgesetzt).
MODUL.VARIABLE # Zugriff auf Variable in Modul
MODUL.FUNKTION() # Aufruf von Funktion in Modul
PAKET.SUBMODUL.VARIABLE # Zugriff auf Variable in Paket-Untermodul
PAKET.SUBMODUL.FUNKTION() # Aufruf von Funktion in Paket-Untermodul
PFAD.ZU.MODUL.VARIABLE # Zugriff auf Variable in Modul in Unterverzeichnis
PFAD.ZU.MODUL.FUNKTION() # Aufruf von Funktion in Modul in Unterverzeichnis
Komponenten von Klassen und Objekten (Attribute, Methoden) werden ebenfalls
durch "." im Namen angesprochen:
OBJEKT.ATTRIBUT # Zugriff auf Attribut von Objekt
OBJEKT.METHODE() # Aufruf von Methode für Objekt
KLASSE.ATTRIBUT # Zugriff auf Klassen-Attribut
KLASSE.METHODE() # Aufruf von Klassen-Methode oder statischer Methode
FUNKTION.ATTRIBUT # Zugriff auf Funktions-Attribut
Spezielle Attribute
-------------------
Spezielle Attribute, werden teilweise von der built-in Funktion "dict()" nicht
aufgelistet, wohl aber von der Funktion "dir()".
+------------------+-----------------------------------------------------------+
| Attribut | Beschreibung |
+------------------+-----------------------------------------------------------+
| __doc__ | Dokumentationsstring ("Docstring") |
| __name__ | Name Klasse/Funktion/Methode/Descriptor/Generator-Instanz |
| __qualname__ | Qualifizierter Name Klasse/.../Generator-Instanz |
| __module__ | Modul in dem Objekt definiert ist |
| __all__ | In __init__.py automatisch zu importierende Submodule bei |
| | from MODUL import * |
+------------------+-----------------------------------------------------------+
| __call__ | Code-Objekt eines Objekts (falls als Funktion aufgerufen) |
| __defaults__ | Tupel mit Defaultwerten für Position-Parameter von Funk. |
| __kwdefaults__ | Dict. mit Defaultwerten für Keyword-Parameter von Funk. |
| __annotations__ | Dict. mit Annotations für Param. + Rückgabewert von Funk. |
| __closure__ | Bindungen freier Variable an Werte zu einer Funktion |
+------------------+-----------------------------------------------------------+
| __mro__ | Tupel der Basisklassen für Methodenauflösung (linear) |
| mro() | Liefert Ergebnis für __mro__ bei Klassen-Instanziierung |
| __subclasses__() | Liste schwacher Referenzen zu direkten Unterklassen |
+------------------+-----------------------------------------------------------+
| __class__ | Klasse zu der eine Instanz gehört |
| __bases__ | Tupel der Basisklassen eines Klassen-Objekts |
| __dict__ | Speicher für dynamische Objektattribute (Name + Wert) |
| __slots__ | Namen der statische Objektattribute (__dict__ entfällt) |
| __weakref__ | "Schwache" Referenzen |
+------------------+-----------------------------------------------------------+
| __globals__ | Referenz zu Dictionary mit globalen Variablen |
+------------------+-----------------------------------------------------------+
| __self__ | Objekt auf dem eine Methode arbeitet |
| __func__ | Funktion die hinter einer Methode steckt (implementiert) |
+------------------+-----------------------------------------------------------+
Spezielle Methoden