2016-06-09 1 views

답변

1

짧은 대답, 당신은 클래스의 모듈 이름을 포함해야하고,이 같은 일부 도달 할 수없는 코드 내에서 해당 모듈을 가져와야 :

이이 필요한 이유를 이해하기 위해
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 
관련 문제