Inheritance (การสืบทอดคลาส) ใน Python เป็นหนึ่งในหลักการของ OOP (Object-Oriented Programming) ซึ่งทำให้เราสามารถสร้างคลาสใหม่ที่ใช้คุณสมบัติของคลาสที่มีอยู่แล้วได้ โดยไม่จำเป็นต้องเขียนโค้ดใหม่ทั้งหมด รูปแบบการใช้งานของ Inheritance สามารถแบ่งออกเป็นหลายรูปแบบตามโครงสร้างการสืบทอดของคลาส ซึ่งประกอบด้วย
Single Inheritance (การสืบทอดแบบเดี่ยว)
เป็นการสืบทอดจากคลาสแม่เพียงคลาสเดียว
# คลาสแม่
class Animal:
def speak(self):
return "Animal speaks"
# คลาสลูก
class Dog(Animal):
def speak(self):
return "Dog barks"
# สร้างอ็อบเจกต์ของคลาสลูก
dog = Dog()
print(dog.speak()) # Output: Dog barksMultiple Inheritance (การสืบทอดจากหลายคลาส)
เป็นการสืบทอดจากคลาสแม่มากกว่าหนึ่งคลาส คลาสลูกจะสามารถเข้าถึงคุณสมบัติของคลาสแม่ทั้งหมดได้
class Animal:
def speak(self):
return "Animal speaks"
class Canine:
def run(self):
return "Canine runs fast"
class Dog(Animal, Canine):
pass
dog = Dog()
print(dog.speak()) # Output: Animal speaks
print(dog.run()) # Output: Canine runs fastMultilevel Inheritance (การสืบทอดหลายระดับ)
คลาสลูกสามารถสืบทอดคุณสมบัติจากคลาสแม่ ซึ่งตัวคลาสแม่นั้นอาจเป็นลูกของคลาสอื่นอีกขั้นหนึ่ง
class Animal:
def speak(self):
return "Animal speaks"
class Dog(Animal):
def speak(self):
return "Dog barks"
class Puppy(Dog):
def speak(self):
return "Puppy barks softly"
puppy = Puppy()
print(puppy.speak()) # Output: Puppy barks softlyHierarchical Inheritance (การสืบทอดแบบลำดับชั้น)
คลาสแม่หนึ่งคลาสสามารถถูกสืบทอดโดยหลายคลาสลูกได้
class Animal:
def speak(self):
return "Animal speaks"
class Dog(Animal):
def speak(self):
return "Dog barks"
class Cat(Animal):
def speak(self):
return "Cat meows"
dog = Dog()
cat = Cat()
print(dog.speak()) # Output: Dog barks
print(cat.speak()) # Output: Cat meowsHybrid Inheritance (การสืบทอดแบบผสม)
เป็นการผสมระหว่างรูปแบบการสืบทอดต่างๆ อาจเป็นการรวมกันของการสืบทอดแบบหลายคลาสและหลายระดับ ตัวอย่างเช่น
class Animal:
def speak(self):
return "Animal speaks"
class Canine(Animal):
def run(self):
return "Canine runs fast"
class Dog(Canine):
def speak(self):
return "Dog barks"
class Labrador(Dog):
def color(self):
return "Labrador is yellow"
labrador = Labrador()
print(labrador.speak()) # Output: Dog barks
print(labrador.run()) # Output: Canine runs fast
print(labrador.color()) # Output: Labrador is yellowการใช้ super()
ในบางครั้ง เราต้องการใช้ฟังก์ชันของคลาสแม่ในคลาสลูก สามารถทำได้โดยใช้คำสั่ง super() ซึ่งช่วยเรียกใช้ฟังก์ชันจากคลาสแม่ได้โดยตรง
class Animal:
def speak(self):
return "Animal speaks"
class Dog(Animal):
def speak(self):
original_speak = super().speak() # เรียกใช้ฟังก์ชัน speak จากคลาสแม่
return f"{original_speak} and Dog barks"
dog = Dog()
print(dog.speak()) # Output: Animal speaks and Dog barksข้อดีของ Inheritance
- การนำกลับมาใช้ใหม่: ลดความซ้ำซ้อนของโค้ด โดยสามารถใช้โค้ดจากคลาสแม่ได้
- ความสามารถในการขยาย: คลาสลูกสามารถเพิ่มฟังก์ชันใหม่หรือปรับแต่งฟังก์ชันของคลาสแม่ได้
- ความยืดหยุ่น: สามารถจัดการคลาสต่างๆ ตามโครงสร้างที่ต้องการได้
การใช้ Inheritance เป็นเครื่องมือที่ทรงพลังในการเขียนโปรแกรมแบบ OOP ช่วยให้โค้ดมีโครงสร้างที่ชัดเจน ยืดหยุ่น และสามารถนำกลับมาใช้ใหม่ได้ง่าย
