TypedDict
ได้รับการยอมรับในหลาม 3.8 ผ่านPEP 589 จาก Python จะ__total__
มีการตั้งค่าสถานะบูลีนเป็นค่าTrue
เริ่มต้น:
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
ดังที่กล่าวไว้ในโพสต์อื่น ๆ รายละเอียดเกี่ยวกับวิธีการนี้จะถูก จำกัด ในเอกสารแต่การเชื่อมโยงของ @Yann Vernier ไปยังซอร์สโค้ด CPythonแนะนำอย่างยิ่ง__total__
เกี่ยวข้องกับtotal
คำหลักใหม่ที่แนะนำใน Python 3.8 :
# 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 จะบ่นที่ commandline:
> 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 เกี่ยวกับจำนวนทั้งสิ้นใน PEP 589
- ส่วนบทความเกี่ยวกับประเภทและ
TypedDict
ใน Python 3.8 โดย Real Python
typing-extensions
แพ็คเกจที่ใช้TypedDict
ใน Python 3.5, 3.6
typing
internals ไม่ได้จัดทำเป็นเอกสารและชิ้นส่วนที่จัดทำเอกสารไม่ดี