현재 클래스를 반환 유형 주석으로 배치
python 3에서 나는 인수를 만들고 유형 주석을 반환할 수 있습니다.예:
class Graph:
def __init__(self, V: int, E: int, edges: list):
pass
@classmethod
def fromfile(cls, readobj: type(sys.stdin)):
pass
def V(self) -> int:
pass
def E(self) -> int:
pass
문제는 아직 정의되지 않은 현재 클래스(Graph)의 반환 유형으로 주석을 만들 수 없다는 것입니다.예:
class Graph:
def reverse(self) -> Graph:
pass
이 코드는 오류와 함께 진행됩니다.
def reverse(self) -> Graph:
NameError: name 'Graph' is not defined
이러한 주석은 IDE가 인수를 인식하고 유형을 반환할 수 있도록 문서화하고 허용하는 데 매우 유용합니다. => 자동 완성 사용
업데이트: 그래서 제가 생각해낸 것은 이것이 불가능하거나 제가 좋아하지 않는 해킹이 필요하다는 것입니다. 그래서 저는 그냥 사용하기로 결정했습니다.def reverse (self) -> 'Graph':
이는 규칙을 위반하더라도 문서화에 대해 이해할 수 있습니다.단점은 IDE 자동 완성에서 작동하지 않는다는 것입니다.
python-3.7에서는 함수 정의 시간에 주석을 평가하지 않음으로써 이 문제가 해결되었습니다.은 대에신, 은보니다됩존에 됩니다.__annotations__
끈 모양으로이것은 PEP 563에서 소개된 연기된 주석 평가라고 합니다.
참고:
사용 중지 정책
부터, Python 3.7 버전, a
__future__
설명된 기능을 사용하려면 가져오기가 필요합니다.경고가 발생하지 않습니다.3에서 Python 3.8a는
PendingDeprecationWarning
에 형식 주석이 하는 상태에서 을 러 사 지 하 않 키 고 웁 니 다 컴 용 모 파 듈 서 모__future__
수입품.3가 Python 3.9가 .부터는 경고가
DeprecationWarning
.Python 4.0에서는 이 동작이 기본 동작이 됩니다.이 PEP와 호환되지 않는 주석 사용은 더 이상 지원되지 않습니다.
다음은 예입니다.
In [7]: from __future__ import annotations
In [8]: class C:
...: def func(cls, arg:str) -> C:
...: pass
...:
In [9]: c = C()
그래서 잠시 후에 저는 제가 내린 결정이-> 'Graph'
에 -> Graph
IDE(PyCharm)가 이런 방식으로 유형을 인식할 수는 없지만 문서화 목적으로 충분히 작동합니다.
제가 사용할 수 있는 또 다른 가능한 해결책은 런타임에 주석을 변경하는 것이었지만, 그것은 문서화 문제를 해결하지 못합니다. 소스 중간 어딘가에서 형식 선언을 찾고 싶지 않을 것입니다.
이 문제는 클래스가 실제로 정의되기 전에 클래스 개체를 인식하는 데 있습니다.파이썬에서 그것은 단순히 불가능합니다.
언급URL : https://stackoverflow.com/questions/15853469/putting-current-class-as-return-type-annotation
'programing' 카테고리의 다른 글
MSBuild TypeScript 컴파일 사용 안 함 (0) | 2023.05.03 |
---|---|
OpenFileDialog를 사용하여 폴더를 선택하는 방법은 무엇입니까? (0) | 2023.05.03 |
현재 분기에 대한 추적 정보가 없습니다. (0) | 2023.05.03 |
배치 스크립트를 사용하여 디렉토리의 각 파일에 작업을 수행하는 방법 (0) | 2023.05.03 |
bash에서 부동소수점 산술을 어떻게 사용합니까? (0) | 2023.04.28 |