[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.