0Pricing
Python Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาส Enum
  2. IntEnum และ Flag
  3. พื้นฐาน NamedTuple
  4. typing.NamedTuple
← กลับไปที่ Python Academy