Polymorphism
Polymorphism áááŻáᏠááŹáá˛?
Inheritance (áĄáá˝áą) ááá ášá áážááşá¸áá˝áŹá¸ááźáŽáááŻááąáŹáˇá Polymorphism ááąáŤáˇá
á ááŹá¸ááŻáśá¸ááᯠáá˝á˛ááźááˇáş: Poly (áĄááťáŹá¸ááźáŽá¸) + Morph (ááŻáśá áś) = ááŻáśá áśáĄááťáŹá¸ááźáŽá¸
á ááşá¸á áŹá¸ááźááˇáş... PS5 controller áážáŹ X áááŻááş áážááááşáááŹá¸á
- FIFA áááşááąááŻááşá¸ X áážáááşáááş ááŹááźá áşááá˛? Pass ááąá¸áááşá
- God of War ááąáŹáˇááąááŻááşá¸ X áážáááşáááş ááŹááźá áşááá˛? Dodge (áážáąáŹááş) áá˝áŹá¸áááşá
áááŻááşá áááŻááş áá áşááŻáááşá¸ (X button)á ááŤááąáááˇáş ááąáŹáˇááąáá˛áˇ Game (Object) ááąáŤáşáá°áááşááźáŽá¸ áá°ááŻááşáá˝áŹá¸áá˛áˇ áĄááŻááş (Action) á áá áşááťááŻá¸á Ꭰááźá áşáá˝áŹá¸áááşá
OOP áážáŹáááşá¸ áĄá˛áˇááŽáĄáááŻááşá¸áá˛á Method (function) ááŹáááş áá áşááŻáááşá¸ á áá°áˇááᯠááąáŤáşáááŻááşáá˛áˇ Object (Class) ááąáŤáşáá°áááşááźáŽá¸ áĄááŻááşááŻááşááŻáś ááŻáśá áśáĄááťáŹá¸ááźáŽá¸ ááźáąáŹááşá¸áá˝áŹá¸ááŹááᯠPolymorphism áááŻáˇááąáŤáşááŹá
ááŤááᯠááŹáááŻáˇ ááŻáśá¸áááŹáá˛?
Flexibility (ááźáąáŹááşá¸áá˝ááşááźááşáá˝ááş) áážááááŻáˇá
Polymorphism ááážááááş áááᯠáááşááᯠcode áá˝áą ááąá¸áááᲠááááŹá¸? if...else... áá˝áąáá˛áˇ áá áşáá˝áŹá¸áážáŹá
# ááŤá Polymorphism áááŻáśá¸áá˛áˇ code
if object_is_dog:
object.bark()
elif object_is_cat:
object.meow()
elif object_is_duck:
object.quack()Polymorphism ááŻáśá¸áááŻááşáááş... áĄá˛áˇááŤáá˝áą áĄááŻááş ááááŻááąáŹáˇáá°á¸á
# ááŤá Polymorphism áá˛áˇ áááŻááşá¸áá˝áŹá¸áá˛áˇ code
# áᏠobject ááźáŽá¸áᲠááŹááŹá speak() áᏠááąáŤáşááťáááŻááş
object.speak()Python áážáŹ Polymorphism ááááşááᯠá á˝ááşá¸ááŹáá˛?
Python áážáŹ Polymorphism ááŻááşáááŻáˇááá˛áˇ áááşá¸áááşá¸ á áᯠáážááááşá
1. Inheritance áá˛áˇ Overriding (Classic áááşá¸)
ááŤá áááᯠInheritance áážáŹ áááşá¸áááşá¸ áá˝áąáˇáá˛áˇááźáŽá¸ááŹá¸á Animal áážáŹ speak() skill áážááááşá Dog, Cat á áĄá˛áˇáᎠspeak() áááŻáᲠOverride ááŻááşááźáŽá¸ áá°áˇáĄááśáá˛áˇáá° áá˝ááşáááşá
Code ááźááˇáşáááş:
# SuperClass
class Animal:
def speak(self):
print("... (ááááşááááşááąáááş) ...")
# SubClasses
class Dog(Animal):
def speak(self): # Overriding ááŻááşááźáŽ
print("ááŻááş! ááŻááş!")
class Cat(Animal):
def speak(self): # Overriding ááŻááşááźáŽ
print("ááźáąáŹááş... ááźáąáŹááş...")
class Duck(Animal):
def speak(self): # Overriding ááŻááşááźáŽ
print("áá˝ááş! áá˝ááş!")
# áááá
ášááŹááşáá˝áą áĄááŻááş á
áŻááŹá¸áááş
my_pets = [Dog(), Cat(), Duck(), Animal()]
# áĄááŻ... ááŹááąáŹááşáá˝áąáá˛áááŻáᏠá
áááşááááşá
áŹá¸áá°á¸
# speak() áááŻáá˛áˇ áááŻááş áááŻáᲠáážáááşáááş
for pet in my_pets:
pet.speak() <-- ááŤá Polymorphism!Output:
ááŻááş! ááŻááş!
ááźáąáŹááş... ááźáąáŹááş...
áá˝ááş! áá˝ááş!
... (ááááşááááşááąáááş) ...2. Duck Typing (Python áá˛áˇ áĄáááŻááşá áŹá¸áááşá¸)
ááŤá Python áá˛áˇ Signature (áááşáážááş) ááᯠááá ášá á áĄáááşá¸ááąáŤáˇá
Duck Typing áááŻáᏠááŹáá˛?
Python á bro áááş class á ááŹááŹáá˛? (bro áá˛áˇ Inheritance) ááᯠááŻáśá¸á á áááşááááşá áŹá¸áá°á¸á Python á bro áážáŹ áĄá˛áˇáᎠskill (method) áážáááŹá¸ áááŻááŹáᲠá áááşáááşá áŹá¸áááşá
áĄááąáŤáşá Dog, Cat, Duck áá˝áąá Animal áááą áĄáá˝áąáááşááś (Inherit) ááž áááŻááşáá°á¸á áĄááťááşá¸ááťááşá¸ ááŹááž áááąáŹáşáááşá¸ áĄááŻááşááŻááşáááşá
ááźááˇáşááĄáąáŹááş (Duck Typing):
# áᎠclass áá˝áąá áááşáá°áˇ ááŽáááž áĄáá˝áąááá°ááŹá¸áá°á¸
# áĄááťááşá¸ááťááşá¸ ááŹááž áááąáŹáşáá°á¸
class Car:
def drive(self):
print("ááá˝ááşá¸... ááŹá¸ááąáŹááşá¸ááąááźáŽ...")
class Bicycle:
def drive(self):
print("áážá°á¸... á
ááşááŽá¸ áááşá¸ááąáááş...")
class Plane:
def fly(self): <-- ááŤá ááŹáááşááá°áá°á¸
print("áážáŽá¸... ááąááŹááş ááťáśááąááźáŽ...")
# áᎠfunction á obj áááŻáá˛áˇááąáŹááşááᯠáá°áááş
# ááźáŽá¸áááş drive() áááŻáá˛áˇ skill ááᯠááąáŤáşáááş
# obj á Car ááŹá¸ Bicycle ááŹá¸ áá° á
áááşááááşá
áŹá¸áá°á¸
def start_driving(obj):
obj.drive()
# á
ááşá¸ááźááˇáşáááş
car1 = Car()
bike1 = Bicycle()
plane1 = Plane()
start_driving(car1) # áĄááŻááşááŻááşáááş
start_driving(bike1) # áĄááŻááşááŻááşáááş
# start_driving(plane1) # <-- ááŤááᯠááąáŤáşáááş Error áááşáááşOutput:
ááá˝ááşá¸... ááŹá¸ááąáŹááşá¸ááąááźáŽ...
áážá°á¸... á
ááşááŽá¸ áááşá¸ááąáááş...plane1 ááᯠstart_driving() áá˛áˇ ááąáŤáşáááşááŹáááŻáˇ Error áááşáá˛?
- Python á ááźááˇáşáááŻááşáááşá ááąáˇ plane1á áááşá¸áážáŹ drive() áááŻáá˛áˇ skill áážáááŹá¸?
- plane1: Sorry ááááŻá ááŤáˇáážáŹ fly() áᲠáážáááŹá
- Python: ááŤááᯠáááşá¸á áᲠ(Duck) áááŻááşáá°á¸á ááŤááąáŤáşáááá°á¸á Error!
ááŤáá˛á Python á Car ááŹá¸ Bicycle ááŹá¸áááŻáˇ áá á áşáá°á¸á drive() áááŻáá˛áˇ áĄááźáŻáĄáá° (Behavior) áážáá ááážááᲠá á áşáááşá
áĄáážá áşááťáŻááş
- Polymorphism áááŻááŹ: ááŻáśá áśáĄááťáŹá¸ááźáŽá¸á
- ááŹááᯠááźáąáŹááŹáá˛?: Method (function) ááŹáááş áá áşááŻáááşá¸ á object ááá°áááş áĄááŻááşááŻááşááŻáś áá áşááťááŻá¸á Ꭰááźá áşáá˝áŹá¸ááŹá
- áááşá¸áááşá¸ (á) - Inheritance: SuperClass áá˛áˇ skill ááᯠSubClass áá˝áąá Override ááŻááşááźáŽá¸ ááŻáśá¸áááşá (áĽáááŹ: Animal.speak() ááᯠDog áá˛áˇ Cat á ááźááşááŻáśá¸ááŹ)
- áááşá¸áááşá¸ (á) - Duck Typing (Pythonic Way): áĄááťááŻá¸ (Class) ááᯠáá á áşáá°á¸á Skill (Method) áážáá ááážááᲠá á áşáááşá Skill áážááááş ááąáŤáşáááŻáˇááááşá áĽáááŹ: drive() áážááááş Car ááźá áşááźá áş Bicycle ááźá áşááźá áş ááąáŤáşááŻáśá¸áááŻáˇáááŹ