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