รูปแบบคลาส
จับคู่กับแอตทริบิวต์ของออบเจกต์
รูปแบบคลาส เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
การจับคู่อ็อบเจกต์
รูปแบบคลาสช่วยให้ match ตรวจสอบชนิดของอ็อบเจกต์และดึงแอตทริบิวต์ออกมาได้ในขั้นตอนเดียว รูปแบบเหล่านี้มีลักษณะเหมือนการเรียกตัวสร้างภายในกรณี
การตรวจสอบชนิดเท่านั้น
รูปแบบคลาสที่มีวงเล็บว่างจะจับคู่กับอินสแตนซ์ใด ๆ ของคลาสนั้น
def kind(value):
match value:
case int():
return 'an integer'
case str():
return 'a string'
case _:
return 'something else'
print(kind(5))
print(kind('hi'))
print(kind([1]))การจับแอตทริบิวต์ด้วยชื่อ
ภายในวงเล็บ ให้เขียน attr=name เพื่อจับคู่อินสแตนซ์และผูกแอตทริบิวต์ที่ระบุชื่อไว้กับตัวแปร
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(3, 4)
match p:
case Point(x=px, y=py):
print('point at', px, py)การจับคู่ค่าแอตทริบิวต์ที่เจาะจง
คุณสามารถกำหนดให้แอตทริบิวต์ต้องเท่ากับค่าลิเทอรัลได้ กรณีนี้จะจับคู่เฉพาะจุดที่อยู่บนแกน x
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def describe(p):
match p:
case Point(x=0, y=0):
return 'origin'
case Point(x=x, y=0):
return 'on x-axis at ' + str(x)
case Point():
return 'elsewhere'
print(describe(Point(0, 0)))
print(describe(Point(5, 0)))
print(describe(Point(1, 1)))รูปแบบตามตำแหน่งด้วย __match_args__
หากคลาสกำหนด __match_args__ คุณจะสามารถจับคู่แอตทริบิวต์ตามตำแหน่งได้ คลาสข้อมูลจะกำหนดค่านี้โดยอัตโนมัติตามลำดับของฟิลด์
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(3, 4)
match p:
case Point(px, py):
print(px, py)การกำหนด __match_args__ ด้วยตนเอง
สำหรับคลาสทั่วไป ให้กำหนด __match_args__ เป็นทูเพิลที่ระบุชื่อแอตทริบิวต์ที่ต้องการให้เรียกใช้ตามตำแหน่งได้
class Point:
__match_args__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
match Point(1, 2):
case Point(a, b):
print(a, b)การกระจายคำสั่งตามคลาส
รูปแบบคลาสช่วยสร้างตัวกระจายคำสั่งที่ชัดเจนสำหรับกลุ่มชนิดที่เกี่ยวข้องกัน โดยแต่ละชนิดจะได้รับการจัดการในกรณีของตนเอง
from dataclasses import dataclass
@dataclass
class Circle:
radius: float
@dataclass
class Square:
side: float
def area(shape):
match shape:
case Circle(radius=r):
return 3.14159 * r * r
case Square(side=s):
return s * s
print(area(Circle(2)))
print(area(Square(3)))การซ้อนรูปแบบคลาส
รูปแบบคลาสสามารถซ้อนกันได้ ฟิลด์ที่เป็นอ็อบเจกต์อยู่แล้วสามารถจับคู่ด้วยรูปแบบคลาสอีกแบบหนึ่ง
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
@dataclass
class Line:
start: Point
end: Point
line = Line(Point(0, 0), Point(3, 4))
match line:
case Line(start=Point(x=0, y=0), end=Point(x=ex, y=ey)):
print('from origin to', ex, ey)การผสมกับชนิดข้อมูลในตัว
ชนิดข้อมูลในตัวรองรับอาร์กิวเมนต์ตามตำแหน่งหนึ่งรายการเพื่อจับค่า int(n) จะจับคู่กับจำนวนเต็มและผูกค่านั้นไว้กับ n
def label(value):
match value:
case int(n):
return 'int ' + str(n)
case str(s):
return 'str ' + s
case _:
return 'other'
print(label(7))
print(label('hi'))ควรใช้รูปแบบคลาสเมื่อใด
เลือกใช้รูปแบบคลาสเมื่อทำงานกับอ็อบเจกต์ที่ทั้งชนิดและค่าแอตทริบิวต์มีผลต่อการทำงาน เช่น อ็อบเจกต์เหตุการณ์ โหนด AST หรือโครงสร้างลำดับชั้นของรูปทรง รูปแบบเหล่านี้ช่วยแทนการตรวจสอบ isinstance และการเข้าถึงแอตทริบิวต์ที่ยืดยาว
การผสมตามตำแหน่งและตามชื่อ
คุณสามารถผสมรูปแบบย่อยตามตำแหน่งและตามชื่อไว้ในรูปแบบคลาสเดียวได้เช่นเดียวกับการเรียกฟังก์ชัน รูปแบบตามตำแหน่งใช้ลำดับของ __match_args__ ส่วนรูปแบบตามชื่อจะระบุแอตทริบิวต์อย่างชัดเจน
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
z: int
p = Point(1, 2, 3)
match p:
case Point(x, y, z=depth):
print(x, y, depth)ตรวจสอบความเข้าใจ
รูปแบบ Point(x=0, y=y) จับคู่กับอะไร
ทบทวน
คุณได้เรียนรู้การจับคู่กับแอตทริบิวต์ของอ็อบเจกต์
ClassName()ตรวจสอบชนิดattr=nameผูกแอตทริบิวต์ ส่วนค่าลิเทอรัลจะกำหนดให้ค่าต้องตรงกันพอดี__match_args__เปิดใช้การจับคู่ตามตำแหน่ง- รูปแบบคลาสสามารถซ้อนกันและกระจายคำสั่งตามลำดับชั้นของชนิดได้
คำถามที่พบบ่อย
บทเรียน “รูปแบบคลาส” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบคลาส” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบคลาส”
จับคู่กับแอตทริบิวต์ของออบเจกต์ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบคลาส” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ