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.
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