"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver importaciones cíclicas para sugerencias de tipos en Python?

¿Cómo resolver importaciones cíclicas para sugerencias de tipos en Python?

Publicado el 2024-11-17
Navegar:625

How to Resolve Cyclic Imports for Type Hinting in Python?

Escriba sugerencias en Python sin importaciones cíclicas

En un intento de dividir una clase grande en dos más pequeñas, se encuentra con el problema de las clases cíclicas. importaciones. La clase "principal" importa la clase mixin, y la clase mixin hace referencia a la clase "principal" en su sugerencia de tipo. Esto da como resultado un ciclo de importación, lo que impide que las sugerencias de tipo funcionen correctamente.

Para resolver esto, puedes considerar el siguiente enfoque:

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

En este ejemplo, la constante TYPE_CHECKING de Python se usa para importar condicionalmente la clase "principal". Al ejecutar el código, la declaración de importación se omite debido a que la constante es False. Sin embargo, las herramientas de verificación de tipo como mypy interpretan el código dentro del bloque if TYPE_CHECKING y reconocen la anotación de tipo para func2.

Otro enfoque implica el uso de una referencia directa:

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

Aquí, la anotación de tipo para func2 es una cadena que representa el nombre de la clase que se importará más adelante. Ambos enfoques requieren el uso de Python 3.7 o superior para funcionar eficazmente con sugerencias de tipo.

Recuerde que el uso de mixins y sugerencias de tipo puede requerir una estructuración adicional en su código. Por ejemplo, mypy recomienda crear una clase base abstracta (ABC) de la que heredan tanto la clase "principal" como la mixta. Esto puede mejorar la precisión de la verificación de tipos.

Declaración de liberación Este artículo se reimprime en: 1729656617 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3