Maison  >  Article  >  développement back-end  >  Comment résoudre les dépendances circulaires dans les indices de type Python ?

Comment résoudre les dépendances circulaires dans les indices de type Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 21:48:31537parcourir

How to Resolve Circular Dependencies in Python's Type Hints?

Indices de type : résolution des dépendances circulaires

En Python, des dépendances circulaires peuvent survenir lorsque deux classes se référencent mutuellement dans leurs indices de type. Cela entraîne une NameError lors de la tentative d'instancier l'une des classes.

Considérons l'exemple suivant :

<code class="python">class Server:
    def register_client(self, client: Client)
        pass


class Client:
    def __init__(self, server: Server):
        server.register_client(self)</code>

La tentative d'instancier le client échouera avec une NameError : le nom 'Client' n'est pas défini.

Utilisation de références directes

Une façon de résoudre cette dépendance circulaire consiste à utiliser une référence directe dans l'indice de type. Cela se fait en fournissant un nom de chaîne pour la classe qui n'a pas encore été définie :

<code class="python">class Server:
    def register_client(self, client: 'Client')
        pass</code>

Reporter l'analyse des annotations

Une autre solution introduite dans Python 3.7 consiste à reporter entièrement l'analyse à l'exécution des annotations. Ceci est réalisé en ajoutant l'importation suivante en haut du module :

<code class="python">from __future__ import annotations</code>

L'analyse des annotations étant reportée, les annotations sont stockées sous forme de représentations sous forme de chaîne de l'arbre de syntaxe abstraite (AST) pour l'expression. Vous pouvez utiliser typing.get_type_hints() pour résoudre ces annotations et résoudre les références directes comme utilisé dans l'exemple précédent.

Pour plus de détails, reportez-vous à PEP 563 : Évaluation reportée des annotations.

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