Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Polymorphism ใน Python


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