Method overriding is a key feature of object-oriented programming (OOP) and inheritance. It allows a subclass (child class) to provide its own specific implementation of a method that is already defined in its superclass (parent class).
When a method is called on an object of the child class, the child’s version of the method is executed instead of the parent’s version.
Simple Example ๐พ
Let’s consider a parent class Animal with a method speak(). Different animals make different sounds, so we can create child classes like Dog and Cat that override the generic speak() method.
Python
# 1. Parent Class (Superclass)
class Animal:
def speak(self):
print("The animal makes a sound.")
# 2. Child Class (Subclass) that inherits from Animal
class Dog(Animal):
# Overriding the parent's speak() method
def speak(self):
print("The dog barks: Woof! ๐ถ")
# 3. Another Child Class
class Cat(Animal):
# Overriding the parent's speak() method
def speak(self):
print("The cat meows: Meow! ๐ฑ")
# --- Let's see it in action ---
# Create objects (instances) of each class
generic_animal = Animal()
my_dog = Dog()
my_cat = Cat()
# Call the speak() method on each object
generic_animal.speak() # Calls the method from the Animal class
my_dog.speak() # Calls the overridden method from the Dog class
my_cat.speak() # Calls the overridden method from the Cat class
Output:
The animal makes a sound.
The dog barks: Woof! ๐ถ
The cat meows: Meow! ๐ฑ
Here, Dog and Cat both provide their own versions of speak(), which is why they produce different outputs than the base Animal class.
Extending a Method with super()
Sometimes you don’t want to completely replace the parent’s method but just add more functionality to it. You can do this using the super() function, which allows you to call the parent class’s method from within the child class.
Example:
Python
class Person:
def __init__(self, name):
self.name = name
def work(self):
print(f"{self.name} starts working.")
class SoftwareDeveloper(Person):
def work(self):
# First, call the work() method from the parent (Person) class
super().work()
# Then, add the specific functionality for this child class
print(f"{self.name} writes code. ๐ป")
# --- Let's see it in action ---
dev = SoftwareDeveloper("Alice")
dev.work()
Output:
Alice starts working.
Alice writes code. ๐ป
In this case, the SoftwareDeveloper‘s work() method extends the Person‘s work() method instead of completely replacing it.
“เฐฎเฑเฐฅเฐกเฑ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฐฟเฐเฐเฑ” เฐเฑเฐฐเฐฟเฐเฐเฐฟเฐจ เฐตเฐฟเฐตเฐฐเฐฃเฐจเฑ เฐคเฑเฐฒเฑเฐเฑเฐฒเฑ เฐเฐฟเฐเฐฆ เฐเฐเฑเฐเฐพเฐจเฑ.
เฐฎเฑเฐฅเฐกเฑ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฐฟเฐเฐเฑ (Method Overriding) เฐ เฐจเฑเฐฆเฐฟ เฐเฐฌเฑเฐเฑเฐเฑเฐเฑ-เฐเฐฐเฐฟเฐฏเฑเฐเฐเฑเฐกเฑ เฐชเฑเฐฐเฑเฐเฑเฐฐเฐพเฐฎเฐฟเฐเฐเฑ (OOP) เฐฎเฐฐเฐฟเฐฏเฑ เฐเฐจเฑเฐนเฑเฐฐเฐฟเฐเฑเฐจเฑเฐธเฑ (Inheritance) เฐฏเฑเฐเฑเฐ เฐเฐ เฐฎเฑเฐเฑเฐฏเฐฎเฑเฐจ เฐฒเฐเฑเฐทเฐฃเฐ. เฐเฐฆเฐฟ เฐเฐ เฐธเฐฌเฑโเฐเฑเฐฒเฐพเฐธเฑ (เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑ) เฐคเฐจ เฐธเฑเฐชเฐฐเฑโเฐเฑเฐฒเฐพเฐธเฑ (เฐชเฑเฐฐเฑเฐเฐเฑ เฐเฑเฐฒเฐพเฐธเฑ)เฐฒเฑ เฐเฐชเฑเฐชเฐเฐฟเฐเฑ เฐกเฐฟเฐซเฑเฐจเฑ เฐเฑเฐฏเฐฌเฐกเฐฟเฐจ เฐเฐ เฐฎเฑเฐฅเฐกเฑโเฐเฑ เฐคเฐจ เฐธเฑเฐตเฐเฐค เฐจเฐฟเฐฐเฑเฐฆเฐฟเฐทเฑเฐเฐฎเฑเฐจ เฐเฐเฐชเฑเฐฒเฐฟเฐฎเฑเฐเฐเฑเฐทเฐจเฑโเฐจเฑ เฐ เฐเฐฆเฐฟเฐเฐเฐกเฐพเฐจเฐฟเฐเฐฟ เฐ เฐจเฑเฐฎเฐคเฐฟเฐธเฑเฐคเฑเฐเฐฆเฐฟ.
เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑ เฐฏเฑเฐเฑเฐ เฐเฐฌเฑเฐเฑเฐเฑเฐเฑโเฐชเฑ เฐเฐ เฐฎเฑเฐฅเฐกเฑ เฐเฐพเฐฒเฑ เฐเฑเฐฏเฐฌเฐกเฐฟเฐจเฐชเฑเฐชเฑเฐกเฑ, เฐชเฑเฐฐเฑเฐเฐเฑ เฐตเฑเฐฐเฑเฐทเฐจเฑโเฐเฑ เฐฌเฐฆเฑเฐฒเฑเฐเฐพ เฐเฑเฐฒเฑเฐกเฑ เฐฏเฑเฐเฑเฐ เฐตเฑเฐฐเฑเฐทเฐจเฑ เฐฎเฑเฐฅเฐกเฑ เฐเฐเฑเฐเฐฟเฐเฑเฐฏเฑเฐเฑ เฐ เฐตเฑเฐคเฑเฐเฐฆเฐฟ.
เฐธเฐพเฐงเฐพเฐฐเฐฃ เฐเฐฆเฐพเฐนเฐฐเฐฃ ๐พ
speak() เฐ
เฐจเฑ เฐฎเฑเฐฅเฐกเฑ เฐเฐจเฑเฐจ Animal เฐ
เฐจเฑ เฐชเฑเฐฐเฑเฐเฐเฑ เฐเฑเฐฒเฐพเฐธเฑโเฐจเฑ เฐชเฐฐเฐฟเฐเฐฃเฐฟเฐฆเฑเฐฆเฐพเฐ. เฐตเฑเฐฐเฑเฐตเฑเฐฐเฑ เฐเฐเฐคเฑเฐตเฑเฐฒเฑ เฐตเฑเฐฐเฑเฐตเฑเฐฐเฑ เฐถเฐฌเฑเฐฆเฐพเฐฒเฑ เฐเฑเฐธเฑเฐคเฐพเฐฏเฐฟ, เฐเฐพเฐฌเฐเฑเฐเฐฟ เฐฎเฐจเฐ Dog เฐฎเฐฐเฐฟเฐฏเฑ Cat เฐตเฐเฐเฐฟ เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑโเฐฒเฐจเฑ เฐธเฑเฐทเฑเฐเฐฟเฐเฐเฐฟ, เฐธเฐพเฐงเฐพเฐฐเฐฃ speak() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฑ เฐเฑเฐฏเฐตเฐเฑเฐเฑ.
Python
# 1. เฐชเฑเฐฐเฑเฐเฐเฑ เฐเฑเฐฒเฐพเฐธเฑ (เฐธเฑเฐชเฐฐเฑโเฐเฑเฐฒเฐพเฐธเฑ)
class Animal:
def speak(self):
print("เฐเฐเฐคเฑเฐตเฑ เฐเฐ เฐถเฐฌเฑเฐฆเฐ เฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ.")
# 2. Animal เฐจเฑเฐเฐกเฐฟ เฐเฐจเฑเฐนเฑเฐฐเฐฟเฐเฑ เฐเฑเฐธเฑเฐเฑเฐจเฑ เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑ (เฐธเฐฌเฑโเฐเฑเฐฒเฐพเฐธเฑ)
class Dog(Animal):
# เฐชเฑเฐฐเฑเฐเฐเฑ เฐฏเฑเฐเฑเฐ speak() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฑ เฐเฑเฐฏเฐกเฐ
def speak(self):
print("เฐเฑเฐเฑเฐ เฐฎเฑเฐฐเฑเฐเฑเฐคเฑเฐเฐฆเฐฟ: เฐญเฑ! เฐญเฑ! ๐ถ")
# 3. เฐฎเฐฐเฑเฐ เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑ
class Cat(Animal):
# เฐชเฑเฐฐเฑเฐเฐเฑ เฐฏเฑเฐเฑเฐ speak() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฑ เฐเฑเฐฏเฐกเฐ
def speak(self):
print("เฐชเฐฟเฐฒเฑเฐฒเฐฟ เฐ
เฐฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ: เฐฎเฑเฐฏเฐพเฐตเฑ! ๐ฑ")
# --- เฐเฐฆเฐฟ เฐเฐฒเฐพ เฐชเฐจเฐฟเฐเฑเฐธเฑเฐคเฑเฐเฐฆเฑ เฐเฑเฐฆเฑเฐฆเฐพเฐ ---
# เฐชเฑเฐฐเฐคเฐฟ เฐเฑเฐฒเฐพเฐธเฑ เฐฏเฑเฐเฑเฐ เฐเฐฌเฑเฐเฑเฐเฑเฐเฑโเฐฒเฐจเฑ (เฐเฐจเฑโเฐธเฑเฐเฐพเฐจเฑเฐธเฑโเฐฒเฐจเฑ) เฐเฑเฐฐเฐฟเฐฏเฑเฐเฑ เฐเฑเฐฏเฐเฐกเฐฟ
generic_animal = Animal()
my_dog = Dog()
my_cat = Cat()
# เฐชเฑเฐฐเฐคเฐฟ เฐเฐฌเฑเฐเฑเฐเฑเฐเฑโเฐชเฑ speak() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐฏเฐเฐกเฐฟ
generic_animal.speak() # Animal เฐเฑเฐฒเฐพเฐธเฑ เฐจเฑเฐเฐกเฐฟ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ
my_dog.speak() # Dog เฐเฑเฐฒเฐพเฐธเฑ เฐจเฑเฐเฐกเฐฟ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฑ เฐเฑเฐฏเฐฌเฐกเฐฟเฐจ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ
my_cat.speak() # Cat เฐเฑเฐฒเฐพเฐธเฑ เฐจเฑเฐเฐกเฐฟ เฐเฐตเฐฐเฑโเฐฐเฑเฐกเฑ เฐเฑเฐฏเฐฌเฐกเฐฟเฐจ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ
เฐซเฐฒเฐฟเฐคเฐ (Output):
เฐเฐเฐคเฑเฐตเฑ เฐเฐ เฐถเฐฌเฑเฐฆเฐ เฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ.
เฐเฑเฐเฑเฐ เฐฎเฑเฐฐเฑเฐเฑเฐคเฑเฐเฐฆเฐฟ: เฐญเฑ! เฐญเฑ! ๐ถ
เฐชเฐฟเฐฒเฑเฐฒเฐฟ เฐ
เฐฐเฑเฐธเฑเฐคเฑเฐเฐฆเฐฟ: เฐฎเฑเฐฏเฐพเฐตเฑ! ๐ฑ
เฐเฐเฑเฐเฐก, Dog เฐฎเฐฐเฐฟเฐฏเฑ Cat เฐฐเฑเฐเฐกเฑ speak() เฐฏเฑเฐเฑเฐ เฐธเฑเฐเฐค เฐตเฑเฐฐเฑเฐทเฐจเฑเฐฒเฐจเฑ เฐ
เฐเฐฆเฐฟเฐธเฑเฐคเฐพเฐฏเฐฟ, เฐ
เฐเฐฆเฑเฐเฑ เฐ
เฐตเฐฟ เฐฌเฑเฐธเฑ Animal เฐเฑเฐฒเฐพเฐธเฑ เฐเฐเฐเฑ เฐญเฐฟเฐจเฑเฐจเฐฎเฑเฐจ เฐ
เฐตเฑเฐเฑโเฐชเฑเฐเฑโเฐฒเฐจเฑ เฐเฐธเฑเฐคเฐพเฐฏเฐฟ.
super() เฐคเฑ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐตเฐฟเฐธเฑเฐคเฐฐเฐฟเฐเฐเฐกเฐ
เฐเฑเฐจเฑเฐจเฐฟเฐธเฐพเฐฐเฑเฐฒเฑ เฐฎเฑเฐฐเฑ เฐชเฑเฐฐเฑเฐเฐเฑ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐชเฑเฐฐเฑเฐคเฐฟเฐเฐพ เฐญเฐฐเฑเฐคเฑ เฐเฑเฐฏเฐเฑเฐเฐกเฐพ, เฐฆเฐพเฐจเฐฟเฐเฐฟ เฐฎเฐฐเฐฟเฐเฑเฐเฐค เฐเฐพเฐฐเฑเฐฏเฐพเฐเฐฐเฐฃเฐจเฑ เฐเฑเฐกเฐฟเฐเฐเฐพเฐฒเฐจเฑเฐเฑเฐตเฐเฑเฐเฑ. super() เฐซเฐเฐเฑเฐทเฐจเฑโเฐจเฑ เฐเฐชเฐฏเฑเฐเฐฟเฐเฐเฐฟ เฐฎเฑเฐฐเฑ เฐฆเฑเฐจเฑเฐจเฐฟ เฐเฑเฐฏเฐตเฐเฑเฐเฑ, เฐเฐฆเฐฟ เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑโเฐฒเฑ เฎเฎฐเฏเฎจเฏเฎคเฏ เฐชเฑเฐฐเฑเฐเฐเฑ เฐเฑเฐฒเฐพเฐธเฑ เฐฏเฑเฐเฑเฐ เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐฏเฐกเฐพเฐจเฐฟเฐเฐฟ เฐฎเฐฟเฐฎเฑเฐฎเฐฒเฑเฐจเฐฟ เฐ
เฐจเฑเฐฎเฐคเฐฟเฐธเฑเฐคเฑเฐเฐฆเฐฟ.
เฐเฐฆเฐพเฐนเฐฐเฐฃ:
Python
class Person:
def __init__(self, name):
self.name = name
def work(self):
print(f"{self.name} เฐชเฐจเฐฟ เฐเฑเฐฏเฐกเฐ เฐชเฑเฐฐเฐพเฐฐเฐเฐญเฐฟเฐธเฑเฐคเฐพเฐฐเฑ.")
class SoftwareDeveloper(Person):
def work(self):
# เฐฎเฑเฐฆเฐ, เฐชเฑเฐฐเฑเฐเฐเฑ (Person) เฐเฑเฐฒเฐพเฐธเฑ เฐจเฑเฐเฐกเฐฟ work() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐเฐพเฐฒเฑ เฐเฑเฐฏเฐเฐกเฐฟ
super().work()
# เฐ เฐคเฐฐเฑเฐตเฐพเฐค, เฐ เฐเฑเฐฒเฑเฐกเฑ เฐเฑเฐฒเฐพเฐธเฑ เฐเฑเฐธเฐ เฐชเฑเฐฐเฐคเฑเฐฏเฑเฐ เฐเฐพเฐฐเฑเฐฏเฐพเฐเฐฐเฐฃเฐจเฑ เฐเฑเฐกเฐฟเฐเฐเฐเฐกเฐฟ
print(f"{self.name} เฐเฑเฐกเฑ เฐตเฑเฐฐเฐพเฐธเฑเฐคเฐพเฐฐเฑ. ๐ป")
# --- เฐเฐฆเฐฟ เฐเฐฒเฐพ เฐชเฐจเฐฟเฐเฑเฐธเฑเฐคเฑเฐเฐฆเฑ เฐเฑเฐฆเฑเฐฆเฐพเฐ ---
dev = SoftwareDeveloper("เฐเฐฒเฐฟเฐธเฑ")
dev.work()
เฐซเฐฒเฐฟเฐคเฐ (Output):
เฐเฐฒเฐฟเฐธเฑ เฐชเฐจเฐฟ เฐเฑเฐฏเฐกเฐ เฐชเฑเฐฐเฐพเฐฐเฐเฐญเฐฟเฐธเฑเฐคเฐพเฐฐเฑ.
เฐเฐฒเฐฟเฐธเฑ เฐเฑเฐกเฑ เฐตเฑเฐฐเฐพเฐธเฑเฐคเฐพเฐฐเฑ. ๐ป
เฐ เฐธเฐเฐฆเฐฐเฑเฐญเฐเฐฒเฑ, SoftwareDeveloper เฐฏเฑเฐเฑเฐ work() เฐฎเฑเฐฅเฐกเฑ, Person เฐฏเฑเฐเฑเฐ work() เฐฎเฑเฐฅเฐกเฑโเฐจเฑ เฐชเฑเฐฐเฑเฐคเฐฟเฐเฐพ เฐญเฐฐเฑเฐคเฑ เฐเฑเฐฏเฐกเฐพเฐจเฐฟเฐเฐฟ เฐฌเฐฆเฑเฐฒเฑเฐเฐพ เฐฆเฐพเฐจเฐฟเฐจเฐฟ เฐตเฐฟเฐธเฑเฐคเฐฐเฐฟเฐธเฑเฐคเฑเฐเฐฆเฐฟ.