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

Susan Sarandon
Libérer: 2024-10-21 21:48:31
original
556 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!