Comment surmonter les dépendances circulaires avec des indices de type en Python ?

Patricia Arquette
Libérer: 2024-10-21 21:52:03
original
353 Les gens l'ont consulté

How to Overcome Circular Dependencies with Type Hints in Python?

Indices de type et dépendances circulaires

Lors de l'utilisation d'indices de type en Python, les dépendances circulaires peuvent poser des problèmes, conduisant à des erreurs telles que NameError. Un exemple de cela se produit lorsque vous tentez d'importer mutuellement deux classes qui s'appuient sur des indices de type se référençant mutuellement.

Considérez le code 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

Ce code tente de définir les classes Serveur et Client. , où Server attend un objet Client et Client prend une instance de Server. Cependant, Python génère NameError car le client n'est pas encore défini lorsqu'il évalue l'indice de type dans la classe Server.

Pour résoudre cette dépendance circulaire, nous pouvons utiliser des références directes en utilisant un nom de chaîne pour le non encore défini. class :

<code class="python">class Server:
    def register_client(self, client: 'Client')
        pass</code>
Copier après la connexion

Cela informe Python que le client sera défini ultérieurement, lui permettant de comprendre correctement l'indice de type.

Alternativement, nous pouvons reporter toute analyse d'exécution des annotations en ajoutant un future importation en haut du module :

<code class="python">from __future__ import annotations</code>
Copier après la connexion

Cette approche stocke les indices de type sous forme de chaînes représentant leur arbre de syntaxe abstraite, qui peut être résolu ultérieurement en utilisant typing.get_type_hints().

En utilisant l'une ou l'autre de ces méthodes, nous pouvons prévenir efficacement les dépendances circulaires et garantir l'interprétation correcte des indices de type dans de tels scénarios.

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!