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

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

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

  1. คลาสและเมธอด __init__
  2. แอตทริบิวต์ของอินสแตนซ์กับคลาส
  3. เมธอดของอินสแตนซ์และ self
  4. เมธอดพิเศษ: __str__ และ __repr__
← กลับไปที่ Python Academy