Maison  >  Article  >  développement back-end  >  Comment résoudre les problèmes d'importation cyclique et utiliser les indices de type dans la division de classe Python ?

Comment résoudre les problèmes d'importation cyclique et utiliser les indices de type dans la division de classe Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 12:53:30573parcourir

How to Resolve Cyclic Import Issues and Utilize Type Hints in Python Class Split?

Indices de type en Python sans importations cycliques

Les indices de type en Python offrent une aide précieuse pour la complétion du code et la vérification de type statique. Cependant, des problèmes surviennent lorsque l'on tente de diviser une classe en plusieurs fichiers tout en conservant les indications de type en raison des importations cycliques.

Une approche pour résoudre ce problème consiste à introduire une classe de base abstraite (ABC) comme intermédiaire. Cela nécessite de modifier à la fois la classe principale et le fichier mixin :

main.py:

<code class="python">from abc import ABC
from mymixin import MyMixinABC

class Main(MyMixinABC):
    def func1(self, xxx):
        ...</code>

mymixin.py:

<code class="python">import abc

class MyMixinABC(abc.ABC):
    def func2(self: 'MyMixinABC', xxx):
        ...</code>

En utilisant un ABC, nous établissons un contrat formel entre la classe principale et le mixin. Les indices de type peuvent désormais faire référence avec précision à l'ABC au lieu du nom réel de la classe.

Pour les utilisateurs de Python 3.7, une approche plus concise est possible en utilisant PEP 563 :

main.py :

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

class Main:
    def func1(self, xxx):
        ...</code>

mymixin.py :

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

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

Ces techniques vous permettent de diviser votre classe en plusieurs fichiers tout en empêchant les importations cycliques et en préservant les avantages de type faisant allusion dans votre code.

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