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