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

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

Linda Hamilton
Linda Hamilton원래의
2024-10-23 12:27:01393검색

How to Resolve Cyclic Imports for Type Hinting in Python?

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

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

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

<code class="python"># 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):
        ...</code>
<code class="python"># 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):
        ...</code>

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

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

<code class="python"># 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'):
        ...</code>

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

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

위 내용은 Python에서 유형 힌트를 위한 순환 가져오기를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.