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

การกำหนด Dataclass

ใช้ @dataclass เพื่อลดโค้ดที่ต้องเขียนซ้ำ

การกำหนด Dataclass เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้คลาสข้อมูล

เมื่อเขียนคลาสที่มีหน้าที่หลักในการเก็บข้อมูล คุณมักต้องเขียนโค้ดสำเร็จรูปเดิมซ้ำ ๆ ได้แก่ __init__, __repr__ และ __eq__ โมดูล คลาสข้อมูล จะสร้างสิ่งเหล่านี้ให้โดยอัตโนมัติจากการประกาศฟิลด์อย่างง่าย

  • มีโค้ดที่ต้องเขียนและอ่านน้อยลง
  • ลดโอกาสพิมพ์ผิดใน __init__
  • มีอยู่ในไลบรารีมาตรฐานตั้งแต่ Python 3.7

วิธีแบบเดิม

นี่คือตัวอย่างคลาสทั่วไปที่เก็บจุดหนึ่งจุด สังเกตว่าต้องเขียนโค้ดมากเพียงใดทั้งที่ต้องการเก็บตัวเลขเพียงสองตัว

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
print(p.x, p.y)

ตัวตกแต่ง @dataclass

วาง @dataclass ไว้เหนือคลาส แล้วประกาศฟิลด์พร้อมคำอธิบายชนิดข้อมูล Python จะสร้าง __init__ ให้โดยอัตโนมัติ

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p.x, p.y)

การสร้าง __repr__ โดยอัตโนมัติ

คลาสข้อมูลยังสร้าง __repr__ ที่อ่านง่ายให้ด้วย ดังนั้นเมื่อพิมพ์ออบเจ็กต์ จะแสดงฟิลด์ของออบเจ็กต์แทนที่อยู่ในหน่วยความจำ

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(3, 4))

การสร้าง __eq__ โดยอัตโนมัติ

อินสแตนซ์ของคลาสข้อมูลสองรายการจะถือว่าเท่ากันเมื่อฟิลด์ทั้งหมดมีค่าเท่ากัน จึงไม่จำเป็นต้องเขียน __eq__ ด้วยตนเอง

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))

ต้องมีคำอธิบายชนิดข้อมูล

แต่ละฟิลด์ต้องมีคำอธิบายชนิดข้อมูล คำอธิบายนี้เป็นสิ่งที่บอกกลไกคลาสข้อมูลว่าชื่อนั้นคือฟิลด์ การกำหนดค่าโดยไม่มีคำอธิบายชนิดข้อมูลจะกลายเป็นแอตทริบิวต์ทั่วไปของคลาส ไม่ใช่ฟิลด์

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

u = User('Alice', 30)
print(u)

การเพิ่มเมธอด

คลาสข้อมูลยังคงเป็นคลาสทั่วไป คุณสามารถเพิ่มเมธอดปกติที่ใช้ฟิลด์ที่สร้างขึ้นโดยอัตโนมัติได้

from dataclasses import dataclass

@dataclass
class Rectangle:
    width: int
    height: int

    def area(self):
        return self.width * self.height

r = Rectangle(3, 4)
print(r.area())

การแก้ไขฟิลด์

โดยค่าเริ่มต้น อินสแตนซ์ของคลาสข้อมูลสามารถเปลี่ยนแปลงได้ คุณจึงกำหนดค่าฟิลด์ใหม่หลังจากสร้างอินสแตนซ์แล้วได้เช่นเดียวกับแอตทริบิวต์ทั่วไป

from dataclasses import dataclass

@dataclass
class Counter:
    value: int

c = Counter(0)
c.value += 5
print(c.value)

asdict และ astuple

ตัวช่วย asdict() และ astuple() จะแปลงอินสแตนซ์เป็นพจนานุกรมหรือทูเพิล ซึ่งสะดวกสำหรับการทำให้เป็นอนุกรม

from dataclasses import dataclass, asdict, astuple

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(asdict(p))
print(astuple(p))

คลาสข้อมูลซ้อนกัน

ฟิลด์ของคลาสข้อมูลสามารถเป็นคลาสข้อมูลอีกคลาสหนึ่งได้ ส่วน __repr__ และ asdict() ที่สร้างขึ้นโดยอัตโนมัติจะทำงานแบบเรียกซ้ำเข้าไปในโครงสร้างที่ซ้อนกัน

from dataclasses import dataclass, asdict

@dataclass
class Address:
    city: str

@dataclass
class Person:
    name: str
    address: Address

p = Person('Bob', Address('Paris'))
print(asdict(p))

ควรใช้คลาสข้อมูลเมื่อใด

เลือกใช้คลาสข้อมูลเมื่อคลาสมีหน้าที่หลักในการรวมค่าที่เกี่ยวข้องกันไว้ด้วยกัน

  • ออบเจ็กต์การกำหนดค่า
  • ระเบียนที่ส่งกลับจากฟังก์ชัน
  • ชนิดค่าที่เรียบง่าย เช่น พิกัดหรือจำนวนเงิน

สำหรับคลาสที่เน้นพฤติกรรมมากกว่าข้อมูล คลาสทั่วไปอาจอ่านเข้าใจได้ชัดเจนกว่า

ตรวจสอบความเข้าใจ

ตัวตกแต่ง @dataclass สร้างอะไรให้โดยอัตโนมัติ

สรุปทบทวน

คุณได้เรียนรู้การใช้ @dataclass เพื่อลดโค้ดสำเร็จรูป

  • ประกาศฟิลด์พร้อมคำอธิบายชนิดข้อมูล
  • ระบบจะสร้าง __init__, __repr__ และ __eq__ ให้
  • ใช้ asdict() และ astuple() เพื่อแปลงอินสแตนซ์
  • คุณยังสามารถเพิ่มเมธอดและซ้อนคลาสข้อมูลได้

คำถามที่พบบ่อย

บทเรียน “การกำหนด Dataclass” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนด Dataclass” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนด Dataclass”

ใช้ @dataclass เพื่อลดโค้ดที่ต้องเขียนซ้ำ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนด Dataclass” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การกำหนด Dataclass
  2. ค่าเริ่มต้นและ field()
  3. ตัวเลือกการตรึงและการเปรียบเทียบ
  4. ไลบรารี attrs
← กลับไปที่ Python Academy