ใน Python ฟังก์ชัน __init__() คือ “constructor” หรือ “ตัวสร้าง” ที่ใช้สำหรับการกำหนดค่าเริ่มต้นให้กับวัตถุ (Object) ที่สร้างขึ้นจากคลาส (Class) ฟังก์ชันนี้จะถูกเรียกโดยอัตโนมัติทุกครั้งที่มีการสร้างอินสแตนซ์ใหม่ของคลาส การใช้งาน __init__() สามารถประยุกต์ได้หลากหลายรูปแบบ ขึ้นอยู่กับการกำหนดค่าหรือคุณสมบัติของวัตถุแต่ละตัว
การใช้งานทั่วไปของ __init__()
กำหนดค่าเริ่มต้นให้กับวัตถุ
ฟังก์ชัน __init__() ถูกใช้เพื่อกำหนดค่าเริ่มต้น (Initial Values) ให้กับคุณสมบัติ (Attribute) ของวัตถุ
class Person:
def __init__(self, name, age):
self.name = name # กำหนดค่าชื่อ
self.age = age # กำหนดค่าอายุ
# สร้างวัตถุจากคลาส Person
person1 = Person("John", 30)
person2 = Person("Alice", 25)
print(person1.name) # Output: John
print(person2.age) # Output: 25ในตัวอย่างนี้ ฟังก์ชัน __init__() จะกำหนดค่าชื่อ (name) และอายุ (age) ให้กับแต่ละวัตถุเมื่อมีการสร้างวัตถุจากคลาส Person
การประยุกต์ใช้งาน __init__() รูปแบบต่าง ๆ
การกำหนดค่าเริ่มต้นแบบคงที่
เราสามารถกำหนดค่าเริ่มต้นให้กับพารามิเตอร์ใน __init__() ได้ หากไม่มีการส่งค่ามาในตอนสร้างวัตถุ
class Car:
def __init__(self, brand, model="Unknown"):
self.brand = brand
self.model = model
# สร้างวัตถุจากคลาส Car
car1 = Car("Toyota", "Corolla")
car2 = Car("Honda") # ไม่ได้ส่งค่า model มา จะใช้ค่า "Unknown"
print(car1.model) # Output: Corolla
print(car2.model) # Output: Unknownในตัวอย่างนี้ หากไม่มีการส่งค่า model มา จะใช้ค่าเริ่มต้นว่า “Unknown”
การทำงานเพิ่มเติมภายใน __init__()
นอกจากการกำหนดค่าเริ่มต้น เราสามารถให้ __init__() ทำงานอื่นๆ เช่น การตรวจสอบข้อมูล หรือการปรับเปลี่ยนข้อมูลก่อนจะกำหนดให้กับคุณสมบัติของวัตถุ
class Employee:
def __init__(self, name, salary):
self.name = name
if salary < 0:
self.salary = 0 # ตรวจสอบไม่ให้เงินเดือนติดลบ
else:
self.salary = salary
# สร้างวัตถุจากคลาส Employee
emp1 = Employee("Bob", 30000)
emp2 = Employee("Alice", -5000) # เงินเดือนติดลบจะถูกปรับเป็น 0
print(emp1.salary) # Output: 30000
print(emp2.salary) # Output: 0ในตัวอย่างนี้ มีการตรวจสอบค่า salary ใน __init__() และปรับค่าให้เป็น 0 หากเงินเดือนติดลบ
การใช้ __init__() ร่วมกับการสืบทอด (Inheritance)
เมื่อเราสร้างคลาสใหม่ที่สืบทอดจากคลาสเดิม เราสามารถเรียกใช้ฟังก์ชัน __init__() ของคลาสแม่ผ่าน super() เพื่อกำหนดค่าจากคลาสแม่ได้
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # เรียกใช้ __init__() ของคลาส Animal
self.breed = breed
# สร้างวัตถุจากคลาส Dog
dog = Dog("Buddy", "Golden Retriever")
print(dog.name) # Output: Buddy
print(dog.breed) # Output: Golden Retrieverในตัวอย่างนี้ Dog สืบทอดจาก Animal และใช้ super() ใน __init__() เพื่อเรียกใช้ฟังก์ชัน __init__() ของคลาสแม่
การกำหนดค่าเริ่มต้นที่ซับซ้อนใน __init__()
ฟังก์ชัน __init__() สามารถประยุกต์ใช้เพื่อกำหนดค่าเริ่มต้นที่ซับซ้อน เช่น การสร้างวัตถุภายในวัตถุ
class Engine:
def __init__(self, horsepower):
self.horsepower = horsepower
class Car:
def __init__(self, brand, engine_horsepower):
self.brand = brand
self.engine = Engine(engine_horsepower) # กำหนดวัตถุ Engine ให้กับ Car
# สร้างวัตถุจากคลาส Car
car = Car("Toyota", 150)
print(car.brand) # Output: Toyota
print(car.engine.horsepower) # Output: 150ในตัวอย่างนี้ Car มีการสร้างวัตถุ Engine ภายใน __init__() เพื่อใช้ในวัตถุของคลาส Car
การใช้ __init__() ร่วมกับ Default Values สำหรับค่าสำคัญ
หากบางข้อมูลที่จำเป็นต้องใช้มีการตั้งค่าเริ่มต้นไว้ใน __init__() เราสามารถประยุกต์ใช้งานค่าพื้นฐานโดยไม่ต้องใส่ทุกครั้งที่สร้างวัตถุ
class Account:
def __init__(self, holder, balance=0):
self.holder = holder
self.balance = balance
# สร้างวัตถุจากคลาส Account
acc1 = Account("John", 500) # กำหนดค่า balance เอง
acc2 = Account("Alice") # ใช้ค่า balance เริ่มต้นเป็น 0
print(acc1.balance) # Output: 500
print(acc2.balance) # Output: 0ในตัวอย่างนี้ balance มีค่าเริ่มต้นเป็น 0 ถ้าไม่ได้กำหนดค่ามา
การจัดการ Exception ใน __init__()
เราสามารถใช้ __init__() เพื่อจัดการกับข้อผิดพลาด (Exception) เมื่อข้อมูลที่รับเข้ามาไม่ถูกต้อง
class Product:
def __init__(self, name, price):
self.name = name
if price < 0:
raise ValueError("Price cannot be negative!") # ข้อผิดพลาดเมื่อราคาเป็นลบ
self.price = price
# สร้างวัตถุจากคลาส Product
try:
prod = Product("Laptop", -1000)
except ValueError as e:
print(e) # Output: Price cannot be negative!ในตัวอย่างนี้ __init__() จัดการข้อผิดพลาดโดยการยกข้อผิดพลาดเมื่อมีการใส่ราคาที่ติดลบ
สรุป
ฟังก์ชัน __init__() ใน Python เป็นฟังก์ชันสำคัญในการสร้างวัตถุและกำหนดค่าเริ่มต้นให้กับวัตถุ ฟังก์ชันนี้สามารถประยุกต์ใช้ได้หลากหลายรูปแบบ เช่น การกำหนดค่าเริ่มต้น การตรวจสอบข้อมูล การสืบทอดค่า รวมถึงการจัดการข้อผิดพลาด
