เมธอดพิเศษ: __str__ และ __repr__
นำเมธอด dunder มาใช้เพื่อแสดงตัวแทนออบเจ็กต์ที่อ่านง่าย
เมธอดพิเศษ: __str__ และ __repr__ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
เมธอดมหัศจรรย์คืออะไร
เมธอดมหัศจรรย์ หรือเมธอด dunder เป็นเมธอดพิเศษที่มีขีดล่างสองตัว และ Python จะเรียกใช้ในบริบทเฉพาะ เช่น การพิมพ์หรือการเปรียบเทียบ
class Foo:
def __str__(self):
return "I am Foo"
f = Foo()
print(f) # I am Foo
print(str(f)) # I am Foo__repr__: การแทนออบเจ็กต์สำหรับนักพัฒนา
__repr__ ควรส่งคืนสตริงที่ไม่กำกวม และควรสามารถใช้สร้างออบเจ็กต์ขึ้นใหม่ได้ โดยจะแสดงใน REPL และถูกใช้โดย repr()
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x}, {self.y})"
p = Point(3, 4)
print(repr(p)) # Point(3, 4)__str__: การแทนออบเจ็กต์สำหรับผู้ใช้
__str__ ให้สตริงที่อ่านเข้าใจง่ายสำหรับมนุษย์ print() และ str() จะเรียกใช้เมธอดนี้ หากไม่มี Python จะใช้ __repr__ เป็นทางเลือกสำรอง
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
def __str__(self):
return f"{self.celsius}°C"
def __repr__(self):
return f"Temperature({self.celsius})"
t = Temperature(100)
print(t) # 100°C
print(repr(t)) # Temperature(100)เมธอดแต่ละตัวถูกเรียกใช้เมื่อใด
__str__: print(), str() และสตริง f ส่วน __repr__: REPL, repr() และคอนเทนเนอร์ที่แสดงองค์ประกอบของตน
class Item:
def __str__(self): return "str"
def __repr__(self): return "repr"
x = Item()
print(x) # str
print([x]) # [repr] ← list uses repr for elements__format__ สำหรับการจัดรูปแบบแบบกำหนดเอง
กำหนด __format__ เพื่อควบคุมวิธีแสดงออบเจ็กต์ของคุณในสตริง f ที่มีข้อกำหนดการจัดรูปแบบ
class Money:
def __init__(self, amount):
self.amount = amount
def __format__(self, spec):
if spec == "usd":
return f"${self.amount:.2f}"
return str(self.amount)
m = Money(9.5)
print(f"{m:usd}") # $9.50__bool__ สำหรับค่าความจริง
__bool__ ทำให้ออบเจ็กต์ของคุณถูกประเมินในบริบทบูลีนได้ ให้ส่งคืนค่า True หรือ False
class Bag:
def __init__(self, items):
self.items = items
def __bool__(self):
return len(self.items) > 0
b = Bag([])
if not b:
print("Bag is empty") # Bag is empty__len__ สำหรับ len()
__len__ ทำให้ len(obj) ใช้งานได้ และยังถูกใช้โดย __bool__ เมื่อไม่มีการกำหนด __bool__
class Stack:
def __init__(self):
self.data = []
def push(self, v): self.data.append(v)
def __len__(self):
return len(self.data)
s = Stack()
s.push(1)
print(len(s)) # 1__eq__ สำหรับความเท่ากัน
กำหนด __eq__ เพื่อระบุว่าอินสแตนซ์สองตัวจะถือว่าเท่ากันเมื่อใช้ == ในกรณีใด
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
print(Vector(1,2) == Vector(1,2)) # True__hash__ ที่ใช้คู่กับ __eq__
เมื่อคุณกำหนด __eq__ แล้ว Python จะตั้งค่า __hash__ เป็น None ทำให้ออบเจ็กต์ไม่สามารถแฮชได้ หากต้องการใช้ออบเจ็กต์ในเซตหรือพจนานุกรม ให้กำหนด __hash__ ด้วย
class Point:
def __init__(self, x, y): self.x, self.y = x, y
def __eq__(self, o): return (self.x, self.y) == (o.x, o.y)
def __hash__(self): return hash((self.x, self.y))
pts = {Point(1,2), Point(1,2)}
print(len(pts)) # 1__add__ และการคำนวณเลข
ตัวดำเนินการทางคณิตศาสตร์จะเชื่อมโยงกับเมธอด dunder เช่น __add__ สำหรับ + และ __sub__ สำหรับ - เป็นต้น
class Vector:
def __init__(self, x, y): self.x, self.y = x, y
def __add__(self, o): return Vector(self.x+o.x, self.y+o.y)
def __repr__(self): return f"Vector({self.x},{self.y})"
print(Vector(1,2) + Vector(3,4)) # Vector(4,6)__getitem__ สำหรับการเข้าถึงด้วยดัชนี
__getitem__ ทำให้คลาสของคุณรองรับการเข้าถึงด้วยดัชนีในวงเล็บเหลี่ยม เช่น obj[key]
class Matrix:
def __init__(self, data):
self.data = data
def __getitem__(self, idx):
return self.data[idx]
m = Matrix([[1,2],[3,4]])
print(m[0]) # [1, 2]
print(m[1][0]) # 3ตรวจสอบอย่างรวดเร็ว
เมธอด dunder ใดจะถูกเรียกเมื่อคุณใช้ print(obj)
ทบทวน
เมธอดมหัศจรรย์ทำให้คลาสของคุณมีพฤติกรรมสอดคล้องกับรูปแบบของ Python __repr__ มุ่งแสดงรายละเอียดสำหรับนักพัฒนา ส่วน __str__ มุ่งแสดงผลสำหรับผู้ใช้ กำหนด __eq__, __hash__ และเมธอด dunder ทางคณิตศาสตร์ เพื่อให้ออบเจ็กต์ทำงานได้อย่างสมบูรณ์
คำถามที่พบบ่อย
บทเรียน “เมธอดพิเศษ: __str__ และ __repr__” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เมธอดพิเศษ: __str__ และ __repr__” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เมธอดพิเศษ: __str__ และ __repr__”
นำเมธอด dunder มาใช้เพื่อแสดงตัวแทนออบเจ็กต์ที่อ่านง่าย คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “เมธอดพิเศษ: __str__ และ __repr__” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาสและเมธอด __init__
- แอตทริบิวต์ของอินสแตนซ์กับคลาส
- เมธอดของอินสแตนซ์และ self
- เมธอดพิเศษ: __str__ และ __repr__