J'ai lu PEP 560 (support de base pour le module de saisie et les types génériques)
Poursuivant hier, lorsque je recherchais l'attribut __origin__
, le PEP PEP 560 --Core support for typing module and generic types Je suis arrivé à. Ce PEP est adopté depuis 3.7, c'est donc celui dont l'implémentation existe déjà et peut être touché.
Aperçu
- Lorsque l'indication de type est apparue, elle a été conçue pour garder le corps Python intact.
- Cependant, il y avait trois problèmes à ce moment-là (version 3.6).
- Performances du module
typing
- Conflit de métaclasse
- De nombreux hacks utilisés dans le module
typing
approche
- Ajoutez deux méthodes spéciales,
__class_getitem__
et __mro_entries__
__class_getitem__
__Getitem__
pour les objets de classe
- Utilisé dans des situations telles que ʻIterable [int] `
__mro_entries__
- Appelé lors de la création d'une classe dérivée à partir d'un objet qui n'est pas une classe
- Déterminez le MRO de la classe dérivée en fonction de la classe retournée par
__mro_entries__
- Un mécanisme pour réaliser
typing._GenericAlias
__mro_entries__
of List [int]
renvoie list
, donc il se comporte comme une sous-classe de list
lors de l'exécution.
- Les classes d'héritage sont stockées dans
__orig_base__
lorsque la classe est définie, et les classes d'héritage résolues sont stockées dans __base__
.
Impressions
- J'ai lu le PEP qui a déclenché la naissance de
typing._GenericAlias
- Il est plus facile de comprendre si vous lisez ce PEP et ensuite le module de saisie.
- Le but du démarrage de PEP était que
__origin__
était un attribut privé pour réaliser __mro_entries__
.
- Si vous utilisez correctement
__class_getitem__
, cela vaut la peine d'être piraté.