변수 주석이란 무엇입니까?
변수 주석은 # type
에 정의 된대로 주석 의 다음 단계 일뿐 입니다 PEP 484
. 이 변경의 근거 는 PEP 526 의 각 섹션에 강조되어 있습니다.
따라서 다음과 같이 유형을 암시하는 대신 :
primes = []
형식을 할당하여 유형에 직접 주석을 달 수 있도록 새로운 구문이 도입 되었습니다.
primes: List[int] = []
@Martijn이 지적했듯이에서 사용 가능한 유형을 사용 typing
하고 빈 목록으로 초기화 하여 정수 목록을 나타냅니다 .
어떤 변화를 가져 오나요?
도입 된 첫 번째 변경 사항 은 문자 뒤에 독립형으로 이름에 주석을 달거나 선택적으로 주석을 달면서 값을 할당 할 수있는 새로운 구문 입니다 :
.
annotated_assignment_stmt ::= augtarget ":" expression ["=" expression]
따라서 문제의 예 :
primes: List[int] = [ ]
새로운 구문과 함께 추가 변경 사항도 도입되었습니다. 모듈과 클래스는 이제 유형 메타 데이터가 첨부 된 __annotations__
속성 ( PEP 3107-Function Annotations 이후의 함수)을 갖습니다 .
from typing import get_type_hints
이제 __main__.__annotations__
선언 된 유형을 보유합니다.
>>> from typing import List, get_type_hints
>>> primes: List[int] = []
>>> captain: str
>>> import __main__
>>> get_type_hints(__main__)
{'primes': typing.List<~T>[int]}
captain
모듈에서도 액세스 할 수있는 유형 만 반환 get_type_hints
하므로 현재 표시되지 않습니다 get_type_hints
. 즉, 먼저 값이 필요합니다.
>>> captain = "Picard"
>>> get_type_hints(__main__)
{'primes': typing.List<~T>[int], 'captain': <class 'str'>}
사용 print(__annotations__)
하면 표시 'captain': <class 'str'>
되지만 실제로 __annotations__
직접 액세스해서는 안됩니다 .
마찬가지로 클래스의 경우 :
>>> get_type_hints(Starship)
ChainMap({'stats': typing.Dict<~KT, ~VT>[str, int]}, {})
a ChainMap
는 주어진 클래스 (첫 번째 매핑에 위치)에 대한 주석과 해당 클래스 ( 객체 mro
에 {}
대한 결과 매핑) 에서 발견 된 기본 클래스에 정의 된 모든 주석을 가져 오는 데 사용됩니다 .
새로운 구문과 함께 ClassVar
클래스 변수를 나타내는 새로운 유형이 추가되었습니다. 그래, stats
당신의 예제에서 실제로입니다 인스턴스 변수 A, 없습니다 ClassVar
.
강제로 사용해야합니까?
의 유형 힌트와 마찬가지로 PEP 484
이들은 완전히 선택 사항 이며 유형 검사 도구 (및이 정보를 기반으로 빌드 할 수있는 다른 모든 도구)에 주로 사용됩니다. Python 3.6의 안정적인 버전이 출시되면 잠정적이므로 향후 약간의 조정이 추가 될 수 있습니다.
primes: List[int] = []
빈 목록primes = []
입니다. 차이점은이된다는 것입니다 주장 하는 것은primes
하기위한 것입니다 에만 포함int
S 및 타사 응용 프로그램이이 주장을 확인하기 위해 프로그램을 확인 입력 할 수 있습니다,하지만 당신은 그냥 쓰기와 같은 상관 없음 파이썬 인터프리터에서 코드를 실행할 때primes = []
, 이렇게하고는primes: List[int] = []; primes.append("string")
아직 유효한.