🐍 บทที่ 8: การเขียนโปรแกรมเชิงวัตถุ (OOP) ใน Python
📌 OOP คืออะไร?
การเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming - OOP) เป็นแนวคิดในการเขียนโปรแกรมที่ใช้ **วัตถุ (Objects)** และ **คลาส (Classes)** เพื่อจัดโครงสร้างของโค้ดให้มีความเป็นระเบียบและสามารถนำกลับมาใช้ใหม่ได้
🛠️ การสร้างคลาส (`class`)
คลาสคือแม่แบบของวัตถุ ใน Python ใช้คำสั่ง `class` เพื่อสร้างคลาส
# สร้างคลาส Car
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
# สร้างวัตถุ (Object) จากคลาส Car
car1 = Car("Toyota", "Red")
car2 = Car("Honda", "Blue")
print(car1.brand, car1.color)
print(car2.brand, car2.color)
✅ ผลลัพธ์:
Toyota Red
Honda Blue
🔄 คอนสตรักเตอร์ (`__init__`)
คอนสตรักเตอร์ (`__init__`) เป็นเมธอดที่ถูกเรียกเมื่อสร้างออบเจ็กต์ใหม่
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("Jhon", 21)
print(person1.name, person1.age)
✅ ผลลัพธ์:
Jhon 21
⚡ เมธอด (`Methods`) ในคลาส
สามารถกำหนดเมธอดในคลาสเพื่อให้วัตถุสามารถทำงานได้
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} กำลังเห่า!")
dog1 = Dog("Buddy")
dog1.bark()
✅ ผลลัพธ์:
Buddy กำลังเห่า!
🛠️ การสืบทอดคลาส (`Inheritance`)
Python รองรับ **การสืบทอดคลาส (Inheritance)** เพื่อให้คลาสลูกสามารถใช้คุณสมบัติของคลาสแม่
# คลาสแม่ (Parent Class)
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} ส่งเสียง!")
# คลาสลูก (Child Class)
class Cat(Animal):
def speak(self):
print(f"{self.name} พูดว่า Meow!")
cat1 = Cat("Whiskers")
cat1.speak()
✅ ผลลัพธ์:
Whiskers พูดว่า Meow!
🔄 การใช้ `super()` ในการเรียกเมธอดของคลาสแม่
สามารถใช้ `super()` เพื่อเรียกเมธอดของคลาสแม่
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} ส่งเสียง!")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
dog1 = Dog("Buddy", "Golden Retriever")
print(dog1.name, dog1.breed)
✅ ผลลัพธ์:
Buddy Golden Retriever
🔐 การห่อหุ้มข้อมูล (`Encapsulation`)
สามารถกำหนดค่าตัวแปรให้เป็น **private** โดยใช้ `__` (สองขีดล่าง) เพื่อป้องกันการเข้าถึงจากภายนอก
class BankAccount:
def __init__(self, balance):
self.__balance = balance # Private attribute
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance())
✅ ผลลัพธ์:
1500
🔹 ไม่สามารถเข้าถึง `self.__balance` ได้โดยตรง
📌 สรุป
- ✅ ใช้ `class` เพื่อสร้างคลาส
- ✅ ใช้ `__init__` เป็นคอนสตรักเตอร์
- ✅ ใช้ `self` เพื่ออ้างถึงออบเจ็กต์
- ✅ ใช้ `Inheritance` เพื่อสืบทอดคุณสมบัติ
- ✅ ใช้ `super()` เพื่อเรียกเมธอดจากคลาสแม่
- ✅ ใช้ `__` เพื่อกำหนดตัวแปรเป็น private