ใน Python ฟังก์ชัน __str__() เป็นฟังก์ชันพิเศษที่ใช้เพื่อกำหนดวิธีการแสดงผลในรูปแบบข้อความของวัตถุ (Object) เมื่อมีการเรียกใช้ฟังก์ชัน print() หรือ str() กับวัตถุนั้น หากไม่มีการกำหนดฟังก์ชัน __str__() Python จะใช้ค่าดีฟอลต์ของการแสดงผลวัตถุซึ่งจะเป็นข้อมูลเกี่ยวกับตำแหน่งหน่วยความจำแทน
การใช้งาน __str__() ทั่วไป
การปรับแต่งรูปแบบการแสดงผลของวัตถุ
เมื่อกำหนดฟังก์ชัน __str__() ภายในคลาส จะสามารถกำหนดวิธีการแสดงผลในรูปแบบข้อความตามที่ต้องการได้
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} years old"
# สร้างวัตถุจากคลาส Person
person = Person("John", 30)
# การเรียกใช้ __str__()
print(person) # Output: John, 30 years oldในตัวอย่างนี้ เมื่อเรียกใช้ print(person) ฟังก์ชัน __str__() จะทำงานและส่งคืนข้อความที่ถูกกำหนดขึ้นใหม่ แทนการแสดงผลตำแหน่งหน่วยความจำของวัตถุ
การประยุกต์ใช้งาน __str__() รูปแบบต่าง ๆ
การปรับแต่งการแสดงผลให้เข้าใจง่ายขึ้น
เราสามารถใช้ __str__() เพื่อปรับแต่งการแสดงผลของวัตถุให้เข้าใจง่ายขึ้น เช่น การรวมข้อมูลหลายๆ คุณสมบัติ (Attributes) ของวัตถุให้อยู่ในข้อความเดียว
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"'{self.title}' by {self.author}, {self.pages} pages"
# สร้างวัตถุจากคลาส Book
book = Book("1984", "George Orwell", 328)
print(book) # Output: '1984' by George Orwell, 328 pagesในตัวอย่างนี้ การแสดงผลของวัตถุ book จะรวมชื่อหนังสือ ผู้แต่ง และจำนวนหน้า ไว้ในข้อความเดียว
การใช้งาน __str__() ในคลาสที่สืบทอด (Inheritance)
ในกรณีที่คลาสลูก (Subclass) สืบทอดจากคลาสแม่ (Superclass) เราสามารถเขียนฟังก์ชัน __str__() เพื่อปรับแต่งการแสดงผลของคลาสลูกได้
class Animal:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Animal: {self.name}"
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
def __str__(self):
return f"Dog: {self.name}, Breed: {self.breed}"
# สร้างวัตถุจากคลาส Dog
dog = Dog("Buddy", "Golden Retriever")
print(dog) # Output: Dog: Buddy, Breed: Golden Retrieverในตัวอย่างนี้ คลาส Dog สืบทอดจากคลาส Animal และมีการเขียน __str__() ขึ้นมาใหม่ เพื่อแสดงข้อมูลเพิ่มเติมในวัตถุของคลาสลูก
การใช้ __str__() ร่วมกับลูป
เมื่อเรียกใช้วัตถุหลายๆ วัตถุในลูป ฟังก์ชัน __str__() จะช่วยแสดงผลแต่ละวัตถุในรูปแบบที่เข้าใจง่าย
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __str__(self):
return f"{self.name} (${self.price})"
# สร้างลิสต์ของวัตถุ
products = [Product("Laptop", 1000), Product("Phone", 500), Product("Tablet", 300)]
# ใช้ลูปเพื่อแสดงผลวัตถุ
for product in products:
print(product)
# Output:
# Laptop ($1000)
# Phone ($500)
# Tablet ($300)ในตัวอย่างนี้ การแสดงผลในลูปจะเรียก __str__() อัตโนมัติ เพื่อแสดงข้อมูลของแต่ละวัตถุในรูปแบบที่อ่านง่าย
การใช้ __str__() เพื่อช่วยใน Debugging
เราสามารถใช้ __str__() เพื่อให้วัตถุแสดงข้อมูลที่จำเป็นเพื่อช่วยในการดีบั๊กโค้ด
class Transaction:
def __init__(self, transaction_id, amount, status):
self.transaction_id = transaction_id
self.amount = amount
self.status = status
def __str__(self):
return f"Transaction ID: {self.transaction_id}, Amount: {self.amount}, Status: {self.status}"
# สร้างวัตถุจากคลาส Transaction
transaction = Transaction(12345, 250.75, "Pending")
# การแสดงผลเพื่อช่วย Debug
print(transaction) # Output: Transaction ID: 12345, Amount: 250.75, Status: Pendingในตัวอย่างนี้ การแสดงข้อมูลใน __str__() จะช่วยให้เราดูสถานะของข้อมูลในวัตถุเพื่อการดีบั๊กที่ง่ายขึ้น
การแสดงผลในรูปแบบ JSON หรือรูปแบบข้อมูลอื่น ๆ
นอกจากนี้ เราสามารถใช้ __str__() เพื่อปรับแต่งให้การแสดงผลวัตถุเป็นข้อมูลในรูปแบบที่ต้องการ เช่น JSON หรือข้อมูลสตริงแบบอื่นๆ
import json
class User:
def __init__(self, username, email):
self.username = username
self.email = email
def __str__(self):
return json.dumps({"username": self.username, "email": self.email})
# สร้างวัตถุจากคลาส User
user = User("john_doe", "[email protected]")
# แสดงผลในรูปแบบ JSON
print(user) # Output: {"username": "john_doe", "email": "[email protected]"}ในตัวอย่างนี้ __str__() ถูกใช้เพื่อแสดงผลข้อมูลของวัตถุในรูปแบบ JSON ซึ่งมีประโยชน์ในการส่งข้อมูลผ่าน API หรือในการประมวลผลที่ต้องการรูปแบบ JSON
สรุป
ฟังก์ชัน __str__() ใน Python เป็นฟังก์ชันที่มีประโยชน์ในการปรับแต่งวิธีการแสดงผลวัตถุในรูปแบบสตริง เมื่อเรียกใช้ print() หรือ str() ประโยชน์ของการใช้งาน __str__() รวมถึงการทำให้ข้อมูลเข้าใจง่ายขึ้น การปรับแต่งวิธีการแสดงผล การช่วยในการดีบั๊ก และการแสดงผลในรูปแบบข้อมูลที่ต้องการ
