typing.NamedTuple
เพิ่มคำใบ้ชนิดให้ทูเพิลที่มีชื่อ
typing.NamedTuple เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทางเลือกที่ระบุชนิดข้อมูล
คลาสฐาน typing.NamedTuple เป็นวิธีสมัยใหม่แบบใช้คลาสสำหรับกำหนดทูเพิลแบบมีชื่อ วิธีนี้เพิ่มคำใบ้ชนิดข้อมูล และมีรูปแบบเหมือนคลาสทั่วไป ซึ่งโปรแกรมแก้ไขส่วนใหญ่และเครื่องมือตรวจสอบชนิดข้อมูลเข้าใจได้ดีกว่ารูปแบบฟังก์ชันสร้าง
ไวยากรณ์แบบใช้คลาส
สืบทอดจาก NamedTuple แล้วประกาศฟิลด์แต่ละรายการด้วยคำกำกับชนิดข้อมูล ผลลัพธ์ยังคงเป็นทูเพิลจริง
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)พฤติกรรมแบบทูเพิลเดิม
ทุกอย่างจากรุ่นฟังก์ชันสร้างยังคงใช้ได้ ได้แก่ การเข้าถึงด้วยชื่อ การเข้าถึงด้วยดัชนี การคลายแพ็ก และความไม่เปลี่ยนแปลง
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p.x, p[1])
x, y = p
print(x, y)ค่าเริ่มต้นภายในคลาส
กำหนดค่าเริ่มต้นให้ฟิลด์ได้ง่าย ๆ เพียงกำหนดค่าไว้ในตัวคลาส ฟิลด์ที่มีค่าเริ่มต้นต้องอยู่หลังฟิลด์ที่ไม่มีค่าเริ่มต้น
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))การเพิ่มเมธอด
เนื่องจากนี่เป็นคลาส คุณจึงเพิ่มเมธอดจริงได้ สิ่งนี้เป็นสิ่งที่ฟังก์ชันสร้าง collections.namedtuple ทำได้ไม่สะดวก
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
def distance_sq(self):
return self.x ** 2 + self.y ** 2
print(Point(3, 4).distance_sq())พร็อพเพอร์ตีด้วย
นอกจากนี้ยังสามารถกำหนดพร็อพเพอร์ตีที่คำนวณค่าจากฟิลด์ต่าง ๆ ได้
from typing import NamedTuple
class Rectangle(NamedTuple):
width: int
height: int
@property
def area(self):
return self.width * self.height
print(Rectangle(3, 4).area)เมธอดช่วยเหลือยังใช้ได้
ตัวช่วยทูเพิลที่คุ้นเคยยังคงใช้งานได้ ได้แก่ _replace(), _asdict() และ _fields ล้วนทำงานในแบบเดิม
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))คำใบ้ชนิดข้อมูลสื่อเจตนา
คำกำกับเหล่านี้ไม่ได้ถูกบังคับใช้ขณะรันโปรแกรม แต่ช่วยบอกชนิดข้อมูลที่คาดไว้ และทำให้เครื่องมืออย่างเครื่องมือตรวจสอบชนิดข้อมูลตรวจพบข้อผิดพลาดก่อนที่คุณจะเรียกใช้โปรแกรม
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple เทียบกับคลาสข้อมูล
การเลือกระหว่างสองแบบ:
- NamedTuple: ไม่เปลี่ยนแปลง มีลักษณะเหมือนทูเพิล รองรับการเข้าถึงด้วยดัชนีและการคลายแพ็ก
- คลาสข้อมูล: เปลี่ยนแปลงได้เป็นค่าเริ่มต้น (หรือกำหนดให้แก้ไขไม่ได้) ไม่รองรับการเข้าถึงด้วยดัชนี แต่มีตัวเลือกการกำหนดค่ามากกว่า
- เลือก NamedTuple เมื่อพฤติกรรมแบบทูเพิลมีความสำคัญ และเลือกคลาสข้อมูลสำหรับระเบียนที่มีความสามารถมากกว่า
การซ้อนและการประกอบ
ทูเพิลแบบมีชื่อสามารถประกอบเข้าด้วยกันได้อย่างลงตัว ฟิลด์หนึ่งอาจเป็นทูเพิลแบบมีชื่ออีกตัว เพื่อสร้างข้อมูลที่มีโครงสร้างและไม่เปลี่ยนแปลง
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
class Line(NamedTuple):
start: Point
end: Point
line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)ในฐานะชนิดข้อมูลผลลัพธ์ของฟังก์ชัน
กำกับฟังก์ชันให้คืนค่าเป็น NamedTuple เพื่อให้โปรแกรมแก้ไขทราบชนิดข้อมูลของฟิลด์ในผลลัพธ์ คำกำกับนี้ช่วยบอกโครงสร้างของระเบียนที่คืนค่า
from typing import NamedTuple
class Stats(NamedTuple):
minimum: int
maximum: int
def analyze(nums) -> Stats:
return Stats(min(nums), max(nums))
r = analyze([5, 2, 8])
print(r.minimum, r.maximum)ตรวจสอบความเข้าใจ
ข้อดีของ typing.NamedTuple เหนือฟังก์ชันสร้าง collections.namedtuple คืออะไร
ทบทวน
คุณได้เรียนรู้การเพิ่มคำใบ้ชนิดข้อมูลให้กับทูเพิลแบบมีชื่อ
- สืบทอด
typing.NamedTupleพร้อมฟิลด์ที่มีคำกำกับ - กำหนดค่าเริ่มต้นภายในคลาส และเพิ่มเมธอดกับพร็อพเพอร์ตี
- ตัวช่วย
_replace,_asdictและ_fieldsยังคงใช้ได้ - เลือกใช้แทนฟังก์ชันสร้างเพื่อให้อ่านง่ายและทำงานร่วมกับเครื่องมือต่าง ๆ ได้ดี
คำถามที่พบบ่อย
บทเรียน “typing.NamedTuple” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “typing.NamedTuple” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “typing.NamedTuple”
เพิ่มคำใบ้ชนิดให้ทูเพิลที่มีชื่อ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “typing.NamedTuple” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส Enum
- IntEnum และ Flag
- พื้นฐาน NamedTuple
- typing.NamedTuple