Polymorphism หมายถึงหลายรูปแบบ ใน Python เราสามารถพบตัวดำเนินการหรือฟังก์ชันเดียวกันที่มีหลายรูปแบบ มันยังมีประโยชน์ในการสร้างคลาสต่างๆ ที่มีเมธอดคลาสชื่อเดียวกัน ซึ่งช่วยในการนำโค้ดกลับมาใช้ใหม่และลดความซับซ้อนของโค้ด Polymorphism ยังเชื่อมโยงกับ inheritance (การสืบทอด) ตามที่เราจะเห็นในตัวอย่างด้านล่าง
Polymorphism ในตัวดำเนินการ
ตัวดำเนินการ + สามารถรับสองอินพุตและให้ผลลัพธ์ขึ้นอยู่กับอินพุตคืออะไร ในตัวอย่างด้านล่างเราสามารถเห็นได้ว่าอินพุตจำนวนเต็มให้ผลลัพธ์เป็นจำนวนเต็ม และถ้าอินพุตหนึ่งเป็น float ผลลัพธ์จะกลายเป็น float สำหรับสตริง พวกมันจะถูกต่อกันเข้าด้วยกัน ซึ่งเกิดขึ้นโดยอัตโนมัติเพราะวิธีที่ตัวดำเนินการ + ถูกสร้างใน Python
ตัวอย่าง
a = 23 b = 11 c = 9.5 s1 = "Hello" s2 = "There!" print(a + b) print(type(a + b)) print(b + c) print(type(b + c)) print(s1 + s2) print(type(s1 + s2))
การรันโค้ดด้านบนให้ผลลัพธ์ดังนี้:
ผลลัพธ์
34 20.5 HelloThere!
Polymorphism ในฟังก์ชัน built-in
เรายังเห็นได้ว่าฟังก์ชัน Python ต่างๆ สามารถรับอินพุตประเภทต่างๆ และประมวลผลแตกต่างกัน เมื่อเราให้ค่าสตริงแก่ len() มันจะนับทุกตัวอักษร แต่ถ้าเราให้ tuple หรือ dictionary มันจะประมวลผลต่างกัน
ตัวอย่าง
str = 'Hi There !'
tup = ('Mon','Tue','wed','Thu','Fri')
lst = ['Jan','Feb','Mar','Apr']
dict = {'1D':'Line','2D':'Triangle','3D':'Sphere'}
print(len(str))
print(len(tup))
print(len(lst))
print(len(dict))
การรันโค้ดด้านบนให้ผลลัพธ์ดังนี้:
ผลลัพธ์
10 5 4 3
Polymorphism ในเมธอดที่ผู้ใช้กำหนด
เราสามารถสร้างเมธอดชื่อเดียวกันแต่ห่อหุ้มอยู่ภายใต้ชื่อคลาสที่ต่างกันได้ ดังนั้นเราสามารถเรียกเมธอดเดียวกันกับชื่อคลาสที่ต่างกันนำหน้าเพื่อได้ผลลัพธ์ที่ต่างกัน ในตัวอย่างด้านล่างเรามีสองคลาสคือ rectangle และ circle เพื่อหาเส้นรอบรูปและพื้นที่โดยใช้เมธอดเดียวกัน
ตัวอย่าง
from math import pi
class Rectangle:
def __init__(self, length, breadth):
self.l = length
self.b = breadth
def perimeter(self):
return 2*(self.l + self.b)
def area(self):
return self.l * self.b
class Circle:
def __init__(self, radius):
self.r = radius
def perimeter(self):
return 2 * pi * self.r
def area(self):
return pi * self.r ** 2
# Initialize the classes
rec = Rectangle(5, 3)
cr = Circle(4)
print("Perimeter of rectangle: ", rec.perimeter())
print("Area of rectangle: ", rec.area())
print("Perimeter of Circle: ", cr.perimeter())
print("Area of Circle: ", cr.area())
การรันโค้ดด้านบนให้ผลลัพธ์ดังนี้:
ผลลัพธ์
Perimeter of rectangle: 16 Area of rectangle: 15 Perimeter of Circle: 25.132741228718345 Area of Circle: 50.26548245743669