"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-17
Parcourir:996

How to Resolve Cyclic Imports for Type Hinting in Python?

Instruction 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 :

# 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):
        ...
# 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):
        ...

Dans cet exemple, la constante TYPE_CHECKING de Python est utilisée 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 :

# 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'):
        ...

Ici, 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 version ultérieure pour fonctionner efficacement avec les indications de type.

N'oubliez pas que l'utilisation de mixins et d'indications 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.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729656617. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3