TypedDict
Python 3.8에서는 PEP 589 를 통해 허용되었습니다 . 파이썬에서는 기본적으로 __total__
부울 플래그로 설정되어 있습니다 True
.
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
다른 게시물에서 언급 했듯이이 방법에 대한 세부 사항은 docs 에서는 제한적 이지만 CPYthon 소스 코드 에 대한 @Yann Vernier의 링크 는 Python 3.8에 도입 된__total__
새로운 total
키워드 와 관련이 있음을 강력히 제안합니다 .
# cypthon/typing.py
class _TypedDictMeta(type):
def __new__(cls, name, bases, ns, total=True):
"""Create new typed dict class object.
...
"""
...
if not hasattr(tp_dict, '__total__'):
tp_dict.__total__ = total
...
어떻게 작동합니까?
개요 : 기본적으로 정의 된 인스턴스를 인스턴스화 할 때 모든 키가 필요합니다 TypedDict
. total=False
이 제한을 무시하고 선택적 키를 허용합니다. 다음 데모를 참조하십시오.
주어진
테스트 디렉토리 트리 :
암호
테스트 디렉토리의 파일 :
# rgb_bad.py
from typing import TypedDict
class Color(TypedDict):
r: int
g: int
b: int
a: float
blue = Color(r=0, g=0, b=255) # missing "a"
# rgb_good.py
from typing import TypedDict
class Color(TypedDict, total=False):
r: int
g: int
b: int
a: float
blue = Color(r=0, g=0, b=255) # missing "a"
데모
키가 없으면 mypy는 명령 행에서 불평합니다.
> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...
설정은 total=False
옵션 키를 허용합니다.
> mypy code/rgb_good.py
Success: no issues found in 1 source file
또한보십시오
- 전체를 보여주는 R. Hettinger의 트윗
- PEP 589의 전체 PEP 섹션
- 기사 섹션 유형에 대한과
TypedDict
실제 파이썬으로 파이썬 3.8
typing-extensions
TypedDict
Python 3.5, 3.6에서 사용할 패키지
typing
내부의 99 %는 문서화되지 않았으며 문서화되지 않은 부분은 문서화되지 않았습니다.