[PYTHON] Ich habe PEP 560 gelesen (Kernunterstützung für das Schreiben von Modulen und generischen Typen).
Fortsetzung von gestern, als ich das Attribut "origin" untersuchte, das PEP PEP 560 - Kernunterstützung für das Schreiben von Modulen und generischen Typen Ich kam an. Dieses PEP wurde seit 3.7 übernommen, es ist also dasjenige, dessen Implementierung bereits vorhanden ist und berührt werden kann.
Überblick
- Als der Typhinweis erschien, wurde er entwickelt, um den Python-Körper unberührt zu lassen.
- Zu diesem Zeitpunkt gab es jedoch drei Probleme (Version 3.6).
Typing
Modulleistung
- Metaklassenkonflikt
- Zahlreiche Hacks, die im Typing-Modul verwendet werden
Ansatz
- Fügen Sie zwei spezielle Methoden hinzu, "class_getitem" und "mro_entries"
__class_getitem__
__Getitem__
für Klassenobjekte
- Wird in Situationen wie "Iterable [int]" verwendet
__mro_entries__
- Wird aufgerufen, wenn eine abgeleitete Klasse aus einem Objekt erstellt wird, das keine Klasse ist
- Bestimmen Sie die MRO der abgeleiteten Klasse basierend auf der von
__mro_entries__
zurückgegebenen Klasse
- Ein Mechanismus zum Realisieren von "typing._GenericAlias"
__mro_entries__
von List [int]
gibt list
zurück, verhält sich also zur Laufzeit wie eine Unterklasse von list
.
- Vererbungsklassen werden in
__orig_base__
gespeichert, wenn die Klasse definiert ist, und aufgelöste Vererbungsklassen werden in __base__
gespeichert.
Impressionen
- Ich habe das PEP gelesen, das die Geburt von
typing._GenericAlias
ausgelöst hat
- Es ist einfacher zu verstehen, wenn Sie diesen PEP und dann das Typisierungsmodul lesen.
- Der Zweck des Startens von PEP war, dass "origin" ein privates Attribut war, um "mro_entries" zu erreichen.
- Wenn Sie
__class_getitem__
gut verwenden, scheint es sich zu lohnen, sie zu hacken.