Polymorphism หมายถึง หลายรูปแบบ ใน python เราสามารถหาตัวดำเนินการหรือฟังก์ชันเดียวกันได้หลายรูปแบบ นอกจากนี้ยังมีประโยชน์ในการสร้างคลาสต่าง ๆ ซึ่งจะมีวิธีคลาสที่มีชื่อเดียวกัน ที่ช่วยในการใช้รหัสจำนวนมากและลดความซับซ้อนของรหัส ความหลากหลายยังเชื่อมโยงกับการสืบทอดดังที่เราจะเห็นในตัวอย่างด้านล่าง
พหุสัณฐานในตัวดำเนินการ
ตัวดำเนินการ + สามารถรับข้อมูลเข้าได้ 2 รายการ และให้ผลลัพธ์โดยขึ้นอยู่กับว่าอินพุตคืออะไร ในตัวอย่างด้านล่าง เราจะเห็นว่าอินพุตจำนวนเต็มให้ผลเป็นจำนวนเต็มได้อย่างไร และหากอินพุตตัวใดตัวหนึ่งเป็นจำนวนลอย ผลลัพธ์จะกลายเป็นจำนวนลอย นอกจากนี้สำหรับสตริง พวกมันจะถูกเชื่อมเข้าด้วยกัน สิ่งนี้เกิดขึ้นโดยอัตโนมัติเนื่องจากวิธีการสร้างตัวดำเนินการ + ใน 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 ในฟังก์ชันในตัว
นอกจากนี้เรายังสามารถเห็นได้ว่าฟังก์ชันของไพ ธ อนที่แตกต่างกันสามารถรับอินพุตประเภทต่าง ๆ แล้วประมวลผลต่างกัน เมื่อเราใส่ค่าสตริงให้กับ len() มันจะนับทุกตัวอักษรในนั้น แต่ถ้าเราห้าทูเพิลหรือพจนานุกรมเป็นอินพุต ทูเพิลจะประมวลผลต่างกัน
ตัวอย่าง
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 ในวิธีที่ผู้ใช้กำหนด
เราสามารถสร้างเมธอดที่มีชื่อเดียวกันแต่ใช้ชื่อคลาสต่างกัน ดังนั้นเราจึงสามารถเรียกใช้เมธอดเดียวกันโดยใช้ชื่อคลาสที่ต่างกันซึ่งกำหนดไว้ล่วงหน้าเพื่อให้ได้ผลลัพธ์ที่แตกต่างกัน ในตัวอย่างด้านล่าง เรามีสองคลาส สี่เหลี่ยม และ วงกลม เพื่อให้ได้ปริมณฑลและพื้นที่โดยใช้วิธีเดียวกัน
ตัวอย่าง
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("Perimter of rectangel: ",rec.perimeter())
print("Area of rectangel: ",rec.area())
print("Perimter of Circle: ",cr.perimeter())
print("Area of Circle: ",cr.area()) การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
ผลลัพธ์
Perimter of rectangel: 16 Area of rectangel: 15 Perimter of Circle: 25.132741228718345 Area of Circle: 50.26548245743669