"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 유형 힌트를 위한 순환 가져오기를 해결하는 방법은 무엇입니까?

Python에서 유형 힌트를 위한 순환 가져오기를 해결하는 방법은 무엇입니까?

2024년 11월 17일에 게시됨
검색:736

How to Resolve Cyclic Imports for Type Hinting in Python?

순환 가져오기 없이 Python의 유형 힌트

큰 클래스를 두 개의 작은 클래스로 분할하려고 하면 순환 문제가 발생합니다. 수입. "main" 클래스는 mixin 클래스를 가져오고 mixin 클래스는 해당 유형 힌트에서 "main" 클래스를 참조합니다. 이로 인해 가져오기 주기가 발생하여 유형 힌트가 제대로 작동하지 못하게 됩니다.

이 문제를 해결하려면 다음 접근 방식을 고려할 수 있습니다.

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

이 예에서는 Python의 TYPE_CHECKING 상수를 사용하여 "기본" 클래스를 조건부로 가져옵니다. 코드를 실행할 때 상수가 False이기 때문에 import 문을 건너뜁니다. 그러나 mypy와 같은 유형 검사 도구는 if TYPE_CHECKING 블록 내의 코드를 해석하고 func2에 대한 유형 주석을 인식합니다.

또 다른 접근 방식은 전방 참조를 사용하는 것입니다:

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

여기서 func2의 유형 주석은 나중에 가져올 클래스의 이름을 나타내는 문자열입니다. 두 접근 방식 모두 유형 힌트를 효과적으로 사용하려면 Python 3.7 이상을 사용해야 합니다.

믹스인과 유형 힌트를 사용하려면 코드에 추가적인 구조화가 필요할 수 있다는 점을 기억하세요. 예를 들어, mypy에서는 "기본" 클래스와 믹스인 클래스가 모두 상속되는 추상 기본 클래스(ABC)를 생성할 것을 권장합니다. 이는 유형 검사의 정확성을 향상시킬 수 있습니다.

릴리스 선언문 이 글은 1729656617에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3