การกำหนด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนด Dataclass
- ค่าเริ่มต้นและ field()
- ตัวเลือกการตรึงและการเปรียบเทียบ
- ไลบรารี attrs