현재 클래스를 반환 유형 주석으로 배치 [중복]
이 질문에 이미 답변이 있습니다.
파이썬 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가 인수 및 반환 유형을 인식하도록 문서화하고 허용하는 데 모두 유용합니다. => 자동 완성 활성화
UPD : 그래서 제가 생각해 낸 것은 이것이 불가능하거나 제가 좋아하지 않는 해킹이 필요하다는 것입니다. 그래서 def reverse (self) -> 'Graph':
규칙을 위반하더라도 문서에 대해 이해할 수있는 것을 사용하기로 결정했습니다 . 단점은 IDE 자동 완성에서 작동하지 않는다는 것입니다.
이제 잠시 후 내가 내린 결정 -> 'Graph'
이 -> Graph
. 내 IDE (PyCharm)가 이런 방식으로 유형을 인식 할 수 있도록 만들지는 않지만 문서화 목적으로 충분히 작동합니다.
내가 사용할 수있는 또 다른 가능한 해결책은 런타임에 주석을 변경하는 것이었지만 문서 문제를 해결하지 못합니다. 소스 중간 어딘가에서 유형 선언을 찾고 싶지 않을 것입니다.
문제는 클래스가 실제로 정의되기 전에 클래스 객체를 인식하는 데 뿌리를두고 있습니다. 파이썬에서는 불가능합니다.
python-3.7에서이 문제는 함수 정의시 주석을 평가하지 않음으로써 해결되었습니다. 대신 __annotations__
문자열 형식으로 보존됩니다 . 이것을 PEP 563에 도입 된 연기 된 주석 평가 라고 합니다.
또한 참고 :
지원 중단 정책
Python 3.7부터
__future__
설명 된 기능을 사용하려면 가져 오기가 필요합니다. 경고가 발생하지 않습니다.Python 3.8에서 a
PendingDeprecationWarning
는__future__
가져 오기 없이 모듈에 유형 주석이있는 경우 컴파일러에 의해 발생합니다 .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()
참고URL : https://stackoverflow.com/questions/15853469/putting-current-class-as-return-type-annotation
'developer tip' 카테고리의 다른 글
htaccess에서 AuthUserFile과 함께 RELATIVE 경로를 사용하는 방법은 무엇입니까? (0) | 2020.09.17 |
---|---|
git은 이름 변경 감지를 위해 유사한 파일을 어떻게 감지합니까? (0) | 2020.09.17 |
DataContractJsonSerializer와 JavaScriptSerializer의 차이점은 무엇입니까? (0) | 2020.09.17 |
python + ldap을 사용하여 Active Directory에 대한 인증 (0) | 2020.09.17 |
Redmine 모범 사례 (0) | 2020.09.17 |