Maison  >  Article  >  développement back-end  >  Comment conserver les indices de type en Python avec les importations cycliques ?

Comment conserver les indices de type en Python avec les importations cycliques ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 13:04:01819parcourir

How to Maintain Type Hints in Python with Cyclic Imports?

Maintenir les indices de type en Python avec des importations cycliques

Lorsque vous travaillez avec de grandes classes Python, il peut être avantageux de les diviser en plusieurs fichiers pour une meilleure organisation et maintenabilité. Cependant, y parvenir tout en préservant les indications de type peut s'avérer difficile en raison d'importations cycliques potentielles.

Une approche consiste à utiliser des annotations de type dans la classe mixin qui font référence à la classe principale. Cependant, cela peut conduire à des importations circulaires qui ne sont pas autorisées en Python.

Pour contourner ce problème, plusieurs solutions peuvent être utilisées :

  • Blocs de code de garde avec 'TYPE_CHECKING' :

    • Entourez le code annoté par type dans la classe mixin dans une instruction if qui vérifie la constante 'TYPE_CHECKING'.
    • Cette constante est définie sur Vrai lors de la vérification du type (par exemple, par des outils comme mypy) mais est Faux au moment de l'exécution, désactivant efficacement l'importation qui autrement provoquerait la dépendance circulaire.
    • Cependant, cela nécessite d'annoter explicitement l'indice de type sous forme de chaîne, comme les symboles ne sont pas disponibles au moment de l'exécution.
  • Utiliser les déclarations directes avec les annotations d'importation « from futur » :

    • Dans Python 3.7, cette importation permet à toutes les annotations de type d'être représentées sous forme de chaînes, éliminant ainsi le besoin d'annotations de chaîne explicites et améliorant la lisibilité.
    • Notez que toutes les indications de type deviennent des chaînes et ne sont pas évaluées au moment de l'exécution. , affectant potentiellement le comportement du code.
  • Envisagez une approche de classe de base abstraite (ABC) :

    • Mypy recommande de créer un ABC dont héritent à la fois la classe principale et le mixin.
    • Cette approche peut être plus adaptée aux projets plus importants où la structure du code et la maintenabilité sont d'une importance primordiale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn