"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver importações cíclicas para dicas de tipo em Python?

Como resolver importações cíclicas para dicas de tipo em Python?

Publicado em 17/11/2024
Navegar:857

How to Resolve Cyclic Imports for Type Hinting in Python?

Dica de tipo em Python sem importações cíclicas

Em uma tentativa de dividir uma classe grande em duas menores, você encontra o problema de cíclica importações. A classe "principal" importa a classe mixin, e a classe mixin faz referência à classe "principal" em sua dica de tipo. Isso resulta em um ciclo de importação, impedindo que a sugestão de tipo funcione corretamente.

Para resolver isso, você pode considerar a seguinte abordagem:

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

Neste exemplo, a constante TYPE_CHECKING do Python é usada para importar condicionalmente a classe "principal". Ao executar o código, a instrução de importação é ignorada porque a constante é False. No entanto, ferramentas de verificação de tipo como mypy interpretam o código dentro do bloco if TYPE_CHECKING e reconhecem a anotação de tipo para func2.

Outra abordagem envolve o uso de uma referência direta:

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

Aqui, a anotação de tipo para func2 é uma string que representa o nome da classe que será importada posteriormente. Ambas as abordagens requerem o uso de Python 3.7 ou superior para funcionar de forma eficaz com dicas de tipo.

Lembre-se de que o uso de mixins e dicas de tipo pode exigir estruturação adicional em seu código. Por exemplo, mypy recomenda a criação de uma classe base abstrata (ABC) da qual as classes "principal" e mixin herdam. Isso pode melhorar a precisão da verificação de tipo.

Declaração de lançamento Este artigo foi reimpresso em: 1729656617 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3