을 정의되지 수 있습니다. 그래서 여기 http://mypy.readthedocs.io/en/latest/common_issues.html#import-cycles 언급 한 것처럼 나는 그것을 따옴표로 쓰기하지만 난 여전히 다음과 같은 오류mypy 명시 적 타입 힌트는 여전히 나는 다음과 같은 일을 시도하고 오류
error: Name 'Node' is not defined
이에 대한 모든 솔루션이 있습니까 얻을?
감사합니다.
을 정의되지 수 있습니다. 그래서 여기 http://mypy.readthedocs.io/en/latest/common_issues.html#import-cycles 언급 한 것처럼 나는 그것을 따옴표로 쓰기하지만 난 여전히 다음과 같은 오류mypy 명시 적 타입 힌트는 여전히 나는 다음과 같은 일을 시도하고 오류
error: Name 'Node' is not defined
이에 대한 모든 솔루션이 있습니까 얻을?
감사합니다.
짧은 대답, 당신은 클래스의 모듈 이름을 포함해야하고,이 같은 일부 도달 할 수없는 코드 내에서 해당 모듈을 가져와야 :
이이 필요한 이유를 이해하기 위해if False:
# for forward-reference type-checking:
import mymodule
class MyClass(object):
def __init__(self):
self.sender = None # type: mymodule.Node
(그리고 왜 작동하는지), 먼저 mypy가 코드 분석을하고 있다는 것을 알아야합니다. 즉, 모듈을 가져 오지 않고 모듈 파일에서 텍스트를 파싱하고 분석합니다.
위 모듈을 가져 오면 import mymodule
행이 실행되지 않으므로 반복적으로 가져 오기를 피할 수 있지만 여전히 mypy가 구문 분석 할 수 있습니다. 이것이 mypy가 분석 중에 mymodule.Node
에 대한 참조를 해결하는 방법입니다.
if False:
from mymodule import Node
class MyClass(object):
def __init__(self):
self.sender = None # type: Node
이 또한 참고 :
완성도를 위해서, 나는 당신이 모듈 이름을 사용하는 것이 필요하지 않음을 언급해야한다, 당신은 구문 분석하는 동안 충돌이 발생하지 않습니다 어떤 이름을 사용할 수 있습니다 주석에 나타나는 유형 이름을 따옴표로 묶을 필요가 없습니다. 이는 형식 주석이 파이썬 객체에 직접 나타나는 경우에만 필요합니다. 다음과 같은 몇 가지 시나리오가 있습니다.
from typing import Optional, NamedTuple
if False:
from mymodule import Node
NodeInfo = NamedTuple('NodeInfo', [('node', 'Node'), ('info', dict)])
class MyClass(object):
def __init__(self, sender: Optional['Node'] = None):
self.sender = sender