Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đa hình (Polymorphism) trong Python


Đa hình (Polymorphism) nghĩa là nhiều hình thức. Trong Python, cùng một toán tử hoặc hàm có thể hoạt động khác nhau tùy đối số. Cũng hữu ích khi tạo các lớp khác nhau có phương thức cùng tên, giúp tái sử dụng code và giảm độ phức tạp. Đa hình liên quan đến kế thừa.

Đa hình trong toán tử

Toán tử + cho kết quả khác nhau tùy kiểu dữ liệu: int + int = int, int + float = float, str + str = nối chuỗi. Điều này xảy ra tự động nhờ cách Python định nghĩa toán tử.

Ví dụ

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))

Kết quả:

Đầu ra

34
20.5
HelloThere!

Đa hình trong hàm built-in

Các hàm built-in như len() xử lý khác nhau tùy kiểu: chuỗi -> đếm ký tự, tuple/list -> đếm phần tử, dict -> đếm cặp khóa-giá trị.

Ví dụ

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))

Kết quả:

Đầu ra

10
5
4
3

Đa hình trong phương thức tự định nghĩa

Tạo phương thức cùng tên trong các lớp khác nhau. Gọi phương thức qua tên lớp để có hành vi khác nhau. Ví dụ: lớp Rectangle và Circle cùng có perimeter() và area().

Ví dụ

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

rec = Rectangle(5, 3)
cr = Circle(4)
print("Chu vi hình chữ nhật:", rec.perimeter())
print("Diện tích hình chữ nhật:", rec.area())
print("Chu vi hình tròn:", cr.perimeter())
print("Diện tích hình tròn:", cr.area())

Kết quả:

Đầu ra

Chu vi hình chữ nhật: 16
Diện tích hình chữ nhật: 15
Chu vi hình tròn: 25.132741228718345
Diện tích hình tròn: 50.26548245743669