Python ฟังก์ชัน __str__()

ใน Python ฟังก์ชัน __str__() เป็นฟังก์ชันพิเศษที่ใช้เพื่อกำหนดวิธีการแสดงผลในรูปแบบข้อความของวัตถุ (Object) เมื่อมีการเรียกใช้ฟังก์ชัน print() หรือ str() กับวัตถุนั้น หากไม่มีการกำหนดฟังก์ชัน __str__() Python จะใช้ค่าดีฟอลต์ของการแสดงผลวัตถุซึ่งจะเป็นข้อมูลเกี่ยวกับตำแหน่งหน่วยความจำแทน

การใช้งาน __str__() ทั่วไป

การปรับแต่งรูปแบบการแสดงผลของวัตถุ

เมื่อกำหนดฟังก์ชัน __str__() ภายในคลาส จะสามารถกำหนดวิธีการแสดงผลในรูปแบบข้อความตามที่ต้องการได้

Python
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) ของวัตถุให้อยู่ในข้อความเดียว

Python
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__() เพื่อปรับแต่งการแสดงผลของคลาสลูกได้

Python
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__() จะช่วยแสดงผลแต่ละวัตถุในรูปแบบที่เข้าใจง่าย

Python
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__() เพื่อให้วัตถุแสดงข้อมูลที่จำเป็นเพื่อช่วยในการดีบั๊กโค้ด

Python
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 หรือข้อมูลสตริงแบบอื่นๆ

Python
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__() รวมถึงการทำให้ข้อมูลเข้าใจง่ายขึ้น การปรับแต่งวิธีการแสดงผล การช่วยในการดีบั๊ก และการแสดงผลในรูปแบบข้อมูลที่ต้องการ

แชร์เรื่องนี้