Python การใช้งาน self Parameter

ใน Python คำว่า self เป็นพารามิเตอร์ที่ใช้ในเมธอดภายในคลาส (class) เพื่ออ้างอิงถึงวัตถุ (object) ที่ถูกสร้างจากคลาสนั้น ๆ self เป็นตัวแทนของตัวเอง (the object itself) ของคลาสนั้น ซึ่งช่วยให้เมธอดสามารถเข้าถึงและจัดการกับคุณสมบัติ (attributes) และเมธอดอื่น ๆ ของวัตถุได้

การใช้งาน self Parameter

อ้างอิงคุณสมบัติของวัตถุ

การใช้ self ช่วยให้เมธอดภายในคลาสสามารถเข้าถึงคุณสมบัติของวัตถุได้ ไม่ว่าจะเป็นการอ่านค่า การเปลี่ยนแปลงค่า หรือการใช้คุณสมบัติเหล่านั้นในกระบวนการคำนวณต่าง ๆ

Python
class Dog:
    def __init__(self, name, breed):
        self.name = name   # อ้างอิงคุณสมบัติ name ของ object ด้วย self
        self.breed = breed  # อ้างอิงคุณสมบัติ breed ของ object ด้วย self

    def describe(self):
        # ใช้ self เพื่อเข้าถึงคุณสมบัติของ object
        return f"{self.name} is a {self.breed}"

# สร้าง object ของ Dog
dog = Dog("Buddy", "Golden Retriever")

# เรียกใช้ method describe() โดยใช้ self
print(dog.describe())  # Output: Buddy is a Golden Retriever

ในตัวอย่างนี้ self.name และ self.breed ใช้เพื่อเข้าถึงและอ้างอิงถึงคุณสมบัติของวัตถุที่ถูกสร้างขึ้น

อ้างอิงเมธอดภายในคลาส

นอกจากการเข้าถึงคุณสมบัติ self ยังสามารถใช้ในการเรียกใช้เมธอดอื่นภายในคลาสเดียวกันได้เช่นกัน

Python
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

    def describe(self):
        # เรียกใช้เมธอดอื่นในคลาสด้วย self
        return f"Area: {self.area()}, Perimeter: {self.perimeter()}"

# สร้าง object ของ Rectangle
rect = Rectangle(5, 10)

# เรียกใช้ method describe() ที่ใช้ self เพื่อเรียก area() และ perimeter()
print(rect.describe())  # Output: Area: 50, Perimeter: 30

ในตัวอย่างนี้ self.area() และ self.perimeter() ใช้เพื่อเรียกใช้เมธอดอื่น ๆ ภายในคลาสเดียวกัน ซึ่งช่วยให้การทำงานภายในคลาสมีความยืดหยุ่นและเชื่อมโยงกัน

เปลี่ยนแปลงคุณสมบัติของวัตถุ

self ยังสามารถใช้ในการเปลี่ยนแปลงคุณสมบัติของวัตถุได้ โดยการเข้าถึงและกำหนดค่าใหม่ให้กับคุณสมบัตินั้น ๆ

Python
class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount  # เปลี่ยนแปลงค่า balance ด้วย self
        return f"Deposit of {amount} done. New balance: {self.balance}"

    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount  # เปลี่ยนแปลงค่า balance ด้วย self
            return f"Withdraw of {amount} done. New balance: {self.balance}"
        else:
            return "Insufficient funds."

# สร้าง object ของ BankAccount
account = BankAccount("Alice", 100)

# ฝากเงิน
print(account.deposit(50))  # Output: Deposit of 50 done. New balance: 150

# ถอนเงิน
print(account.withdraw(30))  # Output: Withdraw of 30 done. New balance: 120

ในตัวอย่างนี้ self.balance ถูกแก้ไขเมื่อมีการฝากหรือถอนเงินจากบัญชีโดยใช้เมธอด deposit() และ withdraw()

การสร้างหลาย object จากคลาสเดียวกัน

self ช่วยให้แต่ละวัตถุ (object) ที่ถูกสร้างจากคลาสเดียวกันมีคุณสมบัติและข้อมูลเฉพาะตัว ดังนั้น object แต่ละตัวจะไม่ทำงานร่วมกันหรือเข้าถึงข้อมูลของกันและกัน

Python
class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def get_info(self):
        return f"Student: {self.name}, Grade: {self.grade}"

# สร้าง object สองตัวจากคลาส Student
student1 = Student("John", "A")
student2 = Student("Jane", "B")

# เรียกใช้ method get_info() ของแต่ละ object
print(student1.get_info())  # Output: Student: John, Grade: A
print(student2.get_info())  # Output: Student: Jane, Grade: B

ในตัวอย่างนี้ student1 และ student2 เป็นวัตถุที่แตกต่างกัน แต่ละตัวมีข้อมูล name และ grade ของตนเอง ซึ่งทำให้สามารถเก็บข้อมูลที่แตกต่างกันได้ใน object แต่ละตัว

การส่งค่า self ในสถานการณ์พิเศษ

หากต้องการเรียกใช้เมธอดในคลาสเดียวกันจากภายนอก (เช่นภายในคลาสอื่น) สามารถส่งวัตถุเข้าไปในเมธอดนั้นโดยตรง ซึ่ง self ในกรณีนี้ก็คืออาร์กิวเมนต์ตัวแรกของเมธอดนั่นเอง

Python
class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, my name is {self.name}."

class Greeter:
    def greet_person(self, person):
        # ส่ง object ไปที่ method greet ของ class Person
        return person.greet()

# สร้าง object ของ Person
person = Person("David")

# สร้าง object ของ Greeter และเรียกใช้ greet_person()
greeter = Greeter()
print(greeter.greet_person(person))  # Output: Hello, my name is David.

ในตัวอย่างนี้ greeter.greet_person(person) ส่ง object person ไปที่เมธอด greet() ของคลาส Person ซึ่งสามารถเข้าถึงคุณสมบัติ name ผ่าน self.name ได้

สรุป

พารามิเตอร์ self เป็นส่วนสำคัญที่ทำให้วัตถุใน Python สามารถเข้าถึงคุณสมบัติและเมธอดภายในคลาสของตัวเองได้ มันช่วยให้การสร้างวัตถุหลาย ๆ ตัวที่มีคุณสมบัติและข้อมูลเฉพาะตัวเป็นไปได้ โดย self ทำให้เมธอดสามารถทำงานร่วมกับวัตถุที่เกี่ยวข้องได้อย่างถูกต้อง

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