[PYTHON] 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é.