Đa hình trong Python (với các ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về tính đa hình, các loại đa hình khác nhau và cách chúng ta có thể triển khai chúng trong Python với sự trợ giúp của các ví dụ.

Đa hình là gì?

Nghĩa đen của đa hình là điều kiện xảy ra ở các dạng khác nhau.

Đa hình là một khái niệm rất quan trọng trong lập trình. Nó đề cập đến việc sử dụng một thực thể kiểu duy nhất (phương thức, toán tử hoặc đối tượng) để biểu diễn các kiểu khác nhau trong các tình huống khác nhau.

Hãy lấy một ví dụ:

Ví dụ 1: Tính đa hình trong toán tử cộng

Chúng tôi biết rằng +toán tử được sử dụng rộng rãi trong các chương trình Python. Nhưng, nó không có một cách sử dụng duy nhất.

Đối với kiểu dữ liệu số nguyên, +toán tử được sử dụng để thực hiện phép cộng số học.

 num1 = 1 num2 = 2 print(num1+num2) 

Do đó, chương trình trên xuất ra 3.

Tương tự, đối với kiểu dữ liệu chuỗi, +toán tử được sử dụng để thực hiện nối.

 str1 = "Python" str2 = "Programming" print(str1+" "+str2) 

Kết quả là, chương trình trên xuất ra Lập trình Python.

Ở đây, chúng ta có thể thấy rằng một toán tử duy nhất +đã được sử dụng để thực hiện các hoạt động khác nhau cho các kiểu dữ liệu riêng biệt. Đây là một trong những sự xuất hiện đơn giản nhất của tính đa hình trong Python.

Đa hình hàm trong Python

Có một số hàm trong Python tương thích để chạy với nhiều kiểu dữ liệu.

Một trong những chức năng như vậy là len()chức năng. Nó có thể chạy với nhiều kiểu dữ liệu bằng Python. Hãy xem xét một số trường hợp sử dụng ví dụ của hàm.

Ví dụ 2: Hàm len () đa hình

 print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal"))) 

Đầu ra

 9 3 2 

Ở đây, chúng ta có thể thấy rằng nhiều kiểu dữ liệu như chuỗi, danh sách, tuple, tập hợp và từ điển có thể hoạt động với len()hàm. Tuy nhiên, chúng ta có thể thấy rằng nó trả về thông tin cụ thể về các kiểu dữ liệu cụ thể.

Đa hình trong hàm len () trong Python

Đa hình lớp trong Python

Đa hình là một khái niệm rất quan trọng trong Lập trình hướng đối tượng.

Để tìm hiểu thêm về OOP trong Python, hãy truy cập: Lập trình hướng đối tượng Python

Chúng ta có thể sử dụng khái niệm đa hình trong khi tạo các phương thức lớp vì Python cho phép các lớp khác nhau có các phương thức trùng tên.

Sau đó, chúng ta có thể tổng quát hóa việc gọi các phương thức này bằng cách bỏ qua đối tượng mà chúng ta đang làm việc. Hãy xem một ví dụ:

Ví dụ 3: Tính đa hình trong các phương thức lớp

 class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound() 

Đầu ra

Meow Tôi là một con mèo. Tên tôi là Kitty. Tôi 2,5 tuổi. Meow Bark Tôi là một con chó. Tên tôi là Fluffy. Tôi 4 tuổi. Vỏ cây

Ở đây, chúng tôi đã tạo hai lớp CatDog. Chúng chia sẻ một cấu trúc tương tự và có cùng tên phương thức info()make_sound().

Tuy nhiên, lưu ý rằng chúng tôi chưa tạo lớp cha chung hoặc liên kết các lớp với nhau theo bất kỳ cách nào. Thậm chí sau đó, chúng ta có thể đóng gói hai đối tượng khác nhau này thành một bộ và lặp qua nó bằng cách sử dụng một biến động vật chung. Có thể do tính đa hình.

Tính đa hình và tính kế thừa

Like in other programming languages, the child classes in Python also inherit methods and attributes from the parent class. We can redefine certain methods and attributes specifically to fit the child class, which is known as Method Overriding.

Polymorphism allows us to access these overridden methods and attributes that have the same name as the parent class.

Let's look at an example:

Example 4: Method Overriding

 from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area()) 

Output

 Circle I am a two-dimensional shape. Squares have each angle equal to 90 degrees. 153.93804002589985 

Here, we can see that the methods such as __str__(), which have not been overridden in the child classes, are used from the parent class.

Do tính đa hình, trình thông dịch Python tự động nhận ra rằng fact()phương thức cho đối tượng a(lớp Square) bị ghi đè. Vì vậy, nó sử dụng cái được định nghĩa trong lớp con.

Mặt khác, vì fact()phương thức cho đối tượng b không bị ghi đè nên nó được sử dụng từ lớp Parent Shape.

Đa hình trong các lớp cha và con trong Python

Lưu ý : Nạp chồng phương thức , một cách để tạo nhiều phương thức có cùng tên nhưng khác đối số, không thể thực hiện được trong Python.

thú vị bài viết...