[python] “with”문은 타입 힌트를 지원합니까?

with구문으로 정의 된 변수에 대한 유형 힌트를 정의 할 수 있습니까 ?

with example() as x:
    print(x)

위의 힌트를 입력 x하여 str(예를 들어) 라고 말하고 싶습니다 .

내가 찾은 유일한 해결 방법은 중간 변수를 사용하는 것이지만 해키 느낌입니다.

with example() as x:
    y: str = x
    print(y)

타이핑 문서 에서 예제를 찾을 수 없습니다 .



답변

Python 3.6에서 구현 된 PEP 526을 사용하면 변수에 주석을 달 수 있습니다. 예를 들어

x: str
with example() as x:
    [...]

또는

with example() as x:
    x: str
    [...]


답변

일반적으로 유형 주석은 API 경계에 배치됩니다. 이 경우 유형은에서 유추되어야합니다 example.__enter__. 해당 함수가 유형을 선언하지 않으면 해결책은 유형 검사기가 해당 유형을 유추하는 데 도움이되도록 해당 스텁 파일 을 작성하는 것 입니다.

특히 이것은 가져온 .pyi모듈과 동일한 스템을 가진 파일을 작성한다는 의미 Example입니다. 그런 다음 다음 코드를 추가 할 수 있습니다.

class Example:
    def __enter__(self) -> str: ...
    def __exit__(self, exc_type, exc_value, exc_traceback) -> None: ...


답변