การใช้งาน Magic Methods เพื่อกำหนดพฤติกรรมอ็อบเจกต์ใน Python OOP

Python
Python
ประเภทโค้ด: Python

การเขียนโปรแกรมแบบเชิงวัตถุ (Object-Oriented Programming หรือ OOP) เป็นแนวคิดที่สำคัญในการพัฒนาซอฟต์แวร์ที่มีความยืดหยุ่นและง่ายต่อการบำรุงรักษา ในภาษา Python การใช้งาน Magic Methods ในคลาสเป็นเครื่องมือสำคัญที่ช่วยในการกำหนดพฤติกรรมพิเศษของอ็อบเจกต์ในรูปแบบที่สอดคล้องกับหลักการของ OOP ในบทความนี้เราจะพาท่านผ่านการเรียนรู้เกี่ยวกับ Magic Methods และวิธีการนำมาใช้ในการกำหนดพฤติกรรมของอ็อบเจกต์ใน Python OOP

Magic Methods คืออะไร? Magic Methods เป็นเมทอดพิเศษในภาษา Python ที่มีชื่อขึ้นต้นด้วยเครื่องหมายขีดล่างสองตัว (double underscores) ทั้งด้านหน้าและด้านหลัง เช่น __init__, __str__, __len__ เป็นต้น ความพิเศษของ Magic Methods นี้คือเมื่อเราใช้งานฟังก์ชันหรือการดำเนินการบางอย่างกับอ็อบเจกต์ เมทอดเหล่านี้จะถูกเรียกอัตโนมัติตามเหตุการณ์ที่เกิดขึ้น เช่น การสร้างอ็อบเจกต์ การแสดงผลในรูปแบบสตริง หรือการใช้งานตัวดำเนินการต่างๆ เป็นต้น

ความสำคัญของ Magic Methods การใช้งาน Magic Methods ช่วยให้เราสามารถกำหนดพฤติกรรมพิเศษของอ็อบเจกต์ได้ตามต้องการ ทำให้โค้ดดูง่ายต่อการอ่านและแก้ไข นอกจากนี้ยังช่วยในการใช้งานร่วมกับฟังก์ชันและโมดูลต่างๆ ที่มีอยู่ในภาษา Python อีกด้วย

ตัวอย่างการใช้งาน Magic Methods เพื่อให้เข้าใจการใช้งาน Magic Methods ใน Python OOP ดีขึ้น เรามาดูตัวอย่างการสร้างคลาสที่แทนพิมพ์ในเครื่องคิดเลข:

class MyClass:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return f"MyClass(value={self.value})"

    def __add__(self, other):
        return self.value + other

    def __sub__(self, other):
        if isinstance(other, MyClass):
            return self.value - other.value
        elif isinstance(other, int):
            return self.value - other
        else:
            raise ValueError("Unsupported operand type")


obj1 = MyClass(10)
obj2 = MyClass(5)

print(obj1)         # แสดงผลลัพธ์จาก __str__
print(obj1 + 3)     # ใช้งาน __add__
print(obj1 - obj2)  # ใช้งาน __sub__

ผลลัพธ์:

 

ผลลัพธ์การใช้งาน
ผลลัพธ์การใช้งาน

ในตัวอย่างนี้:

  • __init__ เป็น Magic Method ที่ถูกเรียกเมื่อสร้างอ็อบเจกต์ ในที่นี้เรากำหนดให้เก็บค่าในแอตทริบิวต์ value.
  • __add__ เป็น Magic Method ที่เรียกเมื่อมีการใช้ตัวดำเนินการบวกกับอ็อบเจกต์ ในที่นี้เรากำหนดให้คืนค่าผลรวมของ self.value กับ other.
  • __sub__ เป็น Magic Method ที่เรียกเมื่อมีการใช้ตัวดำเนินการลบกับอ็อบเจกต์ ในที่นี้เรากำหนดให้คืนค่าผลต่างของ self.value กับ other.
  • __str__ เป็น Magic Method ที่เรียกเมื่อต้องการแสดงผลในรูปแบบสตริง ในที่นี้เรากำหนดให้คืนค่าสตริงที่แสดงค่าของอ็อบเจกต์.

ในตัวอย่างนี้ เราเพิ่มเงื่อนไขเพื่อตรวจสอบว่าตัวอื่นที่เราจะทำการลบเข้ามาเป็นอ็อบเจกต์ของ MyClass หรือตัวเลข (int) เพื่อทำการดำเนินการตามนั้น และถ้าเป็นชนิดข้อมูลอื่น ๆ ก็จะเรียกขึ้นข้อผิดพลาดด้วย ValueError การใช้งาน Magic Methods เป็นเครื่องมือที่สำคัญในการกำหนดพฤติกรรมของอ็อบเจกต์ใน Python OOP ทำให้เราสามารถปรับปรุงโค้ดให้มีความยืดหยุ่นและอ่านง่ายขึ้น นอกจากนี้ยังช่วยในการใช้งานร่วมกับฟังก์ชันและโมดูลต่างๆ ที่มีในภาษา Python ด้วย เพียงแค่เข้าใจและนำไปประยุกต์ใช้ในโครงสร้างของโปรแกรม OOP ของคุณอย่างถูกต้องและเหมาะสม


อ้างอิง
Magic Methods ,[ออนไลน์], เข้าถึงได้จาก https://python-course.eu/oop/magic-methods.php
Python Object Oriented Programming ,[ออนไลน์], เข้าถึงได้จาก https://www.programiz.com/python-programming/object-oriented-programming
Object-Oriented Programming in Python (OOP): Tutorial ,[ออนไลน์], เข้าถึงได้จาก https://www.datacamp.com/tutorial/python-oop-tutorial
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ครบรอบ 15 ปี User mindphp ในเว็บนี้เราเดินทางมาไกล มากๆ
โดย mindphp ส 23 ก.ย. 2023 8:56 pm บอร์ด MindPHP News & Feedback
0
11
ส 23 ก.ย. 2023 8:56 pm โดย mindphp View Topic ครบรอบ 15 ปี User mindphp ในเว็บนี้เราเดินทางมาไกล มากๆ
คำสั่ง SQL สำหรับ DBA database administrator หรือ sysadmin ไว้หาตารางที่ ไม่มี index ในฐานข้อมูล MySQL mariaDB
โดย mindphp ส 23 ก.ย. 2023 6:45 pm บอร์ด SQL Knowledge
1
53
ส 23 ก.ย. 2023 7:02 pm โดย mindphp View Topic คำสั่ง SQL สำหรับ DBA database administrator หรือ sysadmin ไว้หาตารางที่ ไม่มี index ในฐานข้อมูล MySQL mariaDB
เคล็ดลับกระดูกติดเร็ว
โดย SexyKitty ส 23 ก.ย. 2023 4:38 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
16
ส 23 ก.ย. 2023 4:38 pm โดย SexyKitty View Topic เคล็ดลับกระดูกติดเร็ว
วิธีทำชีสเค้กญี่ปุ่น
โดย SexyKitty ส 23 ก.ย. 2023 2:03 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
24
ส 23 ก.ย. 2023 2:03 am โดย SexyKitty View Topic วิธีทำชีสเค้กญี่ปุ่น
ขนมปังบาแกตต์เมนูคุ้มค่าเช่าที่ในห้าง
โดย admeadme ศ 22 ก.ย. 2023 3:43 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
16
ศ 22 ก.ย. 2023 3:43 pm โดย admeadme View Topic ขนมปังบาแกตต์เมนูคุ้มค่าเช่าที่ในห้าง
G - ตั้งค่า config ฝั่งหลังบ้านและ phpBB ของระบบ Shop
โดย eange08 ศ 22 ก.ย. 2023 2:51 pm บอร์ด ThaiVI (Main)
7
45
ส 23 ก.ย. 2023 8:49 pm โดย mindphp View Topic G - ตั้งค่า config ฝั่งหลังบ้านและ phpBB ของระบบ Shop
ชุดเครื่องนอน 3.5 ฟุต ประกอบด้วยอะไรบ้าง
โดย totheworld ศ 22 ก.ย. 2023 1:21 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
15
ศ 22 ก.ย. 2023 1:21 pm โดย totheworld View Topic ชุดเครื่องนอน 3.5 ฟุต ประกอบด้วยอะไรบ้าง
AI and SEO
โดย God Of Backlinks ศ 22 ก.ย. 2023 10:27 am บอร์ด Software Review
0
18
ศ 22 ก.ย. 2023 10:27 am โดย God Of Backlinks View Topic AI and SEO