PEP 294 – Typennamen im types-Modul
- Autor:
- Oren Tirosh <oren at hishome.net>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 19-Jun-2002
- Python-Version:
- 2.5
- Post-History:
Zusammenfassung
Dieses PEP schlägt vor, dass Symbole, die dem Typnamen entsprechen, für alle grundlegenden Python-Typen im types-Modul zum types-Modul hinzugefügt werden.
types.IntegerType -> types.int
types.FunctionType -> types.function
types.TracebackType -> types.traceback
...
Die langen, großgeschriebenen Namen im types-Modul werden als veraltet eingestuft.
Mit dieser Änderung kann das types-Modul als Ersatz für das new-Modul dienen. Das new-Modul wird als veraltet eingestuft und in PEP 4 aufgeführt.
Bekanntmachung
Ein zentralisiertes Repository von Typennamen war ein Fehler. Weder das „types“- noch das „new“-Modul sollten in Python 3.0 übernommen werden.
In der Zwischenzeit macht es keinen Sinn, die vorgeschlagenen Aktualisierungen an den Modulen vorzunehmen. Dies würde zu Störungen ohne jeglichen kompensierenden Nutzen führen.
Stattdessen kann das Problem, dass einige interne Typen (Frames, Funktionen usw.) außerhalb dieser Module nirgendwo leben, entweder durch Hinzufügen zu __builtin__ oder sys behoben werden. Dies wird einen reibungsloseren Übergang zu Python 3.0 ermöglichen.
Begründung
Die Verwendung von zwei Namenssätzen für dieselben Objekte ist redundant und verwirrend.
In Python-Versionen vor 2.2 wurden die Symbole, die vielen Typennamen entsprechen, von den Factory-Funktionen für diese Typen übernommen. Jetzt sind alle grundlegenden Typen mit ihren Factory-Funktionen vereinheitlicht, und daher können die Typennamen konsistent verwendet werden, um auf das Typobjekt zu verweisen.
Die meisten Typen sind entweder als eingebaute Typen oder im new-Modul zugänglich, aber einige Typen wie Traceback und Generator sind nur über das types-Modul unter Namen zugänglich, die nicht dem Typnamen entsprechen. Dieses PEP bietet eine einheitliche Möglichkeit, auf alle grundlegenden Typen unter einem einzigen Satz von Namen zuzugreifen.
Spezifikation
Das types-Modul muss den folgenden Test bestehen
import types
for t in vars(types).values():
if type(t) is type:
assert getattr(types, t.__name__) is t
Die Typen „class“, „instance method“ und „dict-proxy“ wurden bereits in die gültigen Python-Bezeichner „classobj“, „instancemethod“ und „dictproxy“ umbenannt, was dies ermöglicht.
Abwärtskompatibilität
Aufgrund ihrer weit verbreiteten Verwendung ist es nicht geplant, die langen Namen in einer zukünftigen Version tatsächlich aus dem types-Modul zu entfernen. Die langen Namen sollten jedoch in Dokumentationen und Bibliotheksquellen geändert werden, um ihre Verwendung in neuem Code zu entmutigen.
Referenzimplementierung
Eine Referenzimplementierung ist in Issue #569328 verfügbar.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0294.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT