Maison  >  Article  >  développement back-end  >  Comment résoudre les importations cycliques pour l'indication de type en Python ?

Comment résoudre les importations cycliques pour l'indication de type en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 12:27:01498parcourir

How to Resolve Cyclic Imports for Type Hinting in Python?

Indice de type en Python sans importations cycliques

Dans une tentative de diviser une grande classe en deux classes plus petites, vous rencontrez le problème des classes cycliques. importations. La classe "main" importe la classe mixin et la classe mixin fait référence à la classe "main" dans son indice de type. Cela entraîne un cycle d'importation, empêchant l'indication de type de fonctionner correctement.

Pour résoudre ce problème, vous pouvez envisager l'approche suivante :

<code class="python"># main.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from mixin import MyMixin

class Main(object):
    def func1(self, xxx: Any):
        ...</code>
<code class="python"># mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx: Any):
        ...</code>

Dans cet exemple, TYPE_CHECKING de Python constant est utilisé pour importer conditionnellement la classe "principale". Lors de l'exécution du code, l'instruction d'importation est ignorée car la constante est False. Cependant, les outils de vérification de type comme mypy interprètent le code dans le bloc if TYPE_CHECKING et reconnaissent l'annotation de type pour func2.

Une autre approche consiste à utiliser une référence directe :

<code class="python"># mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self, xxx: 'Main'):
        ...</code>

Ici, le l'annotation de type pour func2 est une chaîne représentant le nom de la classe qui sera importée ultérieurement. Les deux approches nécessitent l'utilisation de Python 3.7 ou supérieur pour fonctionner efficacement avec les indices de type.

N'oubliez pas que l'utilisation de mixins et d'indices de type peut nécessiter une structuration supplémentaire dans votre code. Par exemple, mypy recommande de créer une classe de base abstraite (ABC) dont héritent vos classes "principales" et mixin. Cela peut améliorer la précision de la vérification de type.

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