Python đa hình

Giả sử có một lớp gọi là động vật, nhưng trong lớp đó, có rất nhiều dạng như chó, mèo và bò. Đó là, một lớp động vật chung bao gồm nhiều dạng có hình dạng và kích cỡ khác nhau và thực hiện nhiều chức năng khác nhau. Toàn bộ hiện tượng này được định nghĩa bởi một thuật ngữ duy nhất. tính đa hình. Đa hình là một thuật ngữ được sử dụng trong Python để chỉ khả năng của một đối tượng có nhiều dạng. Thuật ngữ này có nguồn gốc từ hai thuật ngữ riêng biệt. poly, có nghĩa là nhiều, và morphs, có nghĩa là hình thức

Một lớp là một khuôn mẫu để tạo một đối tượng. Trong ví dụ sau, chúng ta tạo một lớp có tên-A và khai báo một biến x, sau đó biến này được truyền một giá trị. Đối tượng x được tạo và giá trị của x được in

Một ví dụ đơn giản thể hiện khái niệm lớp và đối tượng trong Python. -

Người xây dựng

Hàm tạo là một loại chương trình con trong lập trình hướng đối tượng. Khi một đối tượng được tạo trong một lớp, hàm tạo hàm được sử dụng để gán giá trị cho các thành viên dữ liệu. Hầu như mỗi khi chúng ta tạo một đối tượng trong Python, chúng ta đều sử dụng hàm __init__(). Chúng tôi sử dụng hàm __init__() ở hầu hết mọi nơi trong đa hình

Tính đa hình trong Python là gì?

Đa hình là một thuật ngữ được sử dụng trong Python để chỉ một tên hàm chung có thể được sử dụng cho một số loại. Khái niệm này thường được sử dụng trong lập trình hướng đối tượng của Python. Như trường hợp của các ngôn ngữ lập trình khác như Java và C++, tính đa hình được triển khai trong Python cho nhiều mục đích khác nhau, đáng chú ý nhất là Duck Typing, Toán tử và Phương thức nạp chồng và Ghi đè phương thức. Tính đa hình này có thể được thực hiện theo hai cách riêng biệt. quá tải và ghi đè

Một minh chứng đơn giản về tính đa hình trong Python. -

>>>4+5
9
>>>"4"+"5"
45
>>>"ab"+"cd"
abcd

Chúng ta có thể thấy từ ví dụ trên rằng toán tử cộng được sử dụng theo nhiều cách khác nhau. Trong ví dụ đầu tiên, do dữ liệu đã cho là hai giá trị nguyên nên toán tử đã thực hiện phép cộng hai số

Và trong ví dụ thứ hai, các giá trị giống hệt nhau được cung cấp dưới dạng dữ liệu chuỗi và cùng một toán tử nối hai chuỗi (nối là hành động nối hai chuỗi từ đầu đến cuối). Trong ví dụ thứ ba, dữ liệu là hai chuỗi, nhưng toán tử giống hệt với chuỗi trước đó và nó nối hai chuỗi

Mặc dù giá trị đầu tiên là một số nguyên, toán tử cộng nối hai văn bản trong trường hợp này

Do đó, đây là một số trường hợp cơ bản nhất của tính đa hình trong Python

Làm thế nào để sử dụng đa hình?

quá tải

Quá tải có thể được phân thành hai loại

  • Quá tải toán tử
  • Quá tải phương thức

Quá tải toán tử

Nạp chồng toán tử là một loại nạp chồng trong đó một toán tử có thể được sử dụng theo những cách khác với

những người được nêu trong định nghĩa được xác định trước của nó

>>>print(2*7)
14
>>>print("a"*3)
aaa

Như vậy, trong ví dụ đầu tiên, toán tử nhân hai số;

phép nhân của một chuỗi và một số nguyên là không khả thi, ký tự được hiển thị ba lần hai lần

Do đó, nó cho thấy cách một toán tử có thể được sử dụng theo nhiều cách khác nhau

Quá tải toán tử trong thực tế

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)

Traceback (most recent call last):
File “G:рythоn рyсhаrm рrоjeсtmаin.рy”, line 7, in
    total_fare=bus+ car
TypeError: unsupported operand type(s) for +: ‘Vehicle’ and ‘Vehicle’

Trong ví dụ trên, đã xảy ra lỗi do Python không thể kết hợp hai đối tượng. Trong

trường hợp này, mặt hàng là một chiếc xe

Bây giờ là lúc sử dụng quá tải toán tử

Bây giờ chúng ta sẽ quá tải phương thức cụ thể __add__ toán tử

class Vehicle:
def __init__(self, fare):
self.fare = fare
def __add__(self, other)://using the special function __add__ operator
return self.fare+ other.fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
50

Bằng cách nạp chồng hàm đặc biệt, chúng ta khai báo rằng bất cứ khi nào chúng ta sử dụng toán tử cộng trong đối tượng

total_fare=xe buýt+xe hơi, giá vé của họ sẽ được thêm vào

ví dụ 2. Trong ví dụ này, chúng ta hãy so sánh giá vé của một số phương thức vận tải

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
    def __lt__(self, other):// relational operator  __lt__ is used here as the special function
        return self.fare< other.fare

bus= Vehicle(10)
car= Vehicle(30)
compare=bus< car
print(compare)

True

Trong ví dụ trên, toán tử quan hệ __lt__ được sử dụng như một chức năng đặc biệt để cho phép toán tử

Quá tải phương thức

Quá tải một phương thức đề cập đến một lớp có nhiều phương thức có cùng tên nhưng có thể khác biệt

thông số. Mặc dù Python vốn không kích hoạt quá tải phương thức, nhưng có rất nhiều

kỹ thuật để làm điều này. Mặc dù có thể nạp chồng phương thức, nhưng chỉ những phương thức được chỉ định gần đây nhất

Hãy cố gắng hiểu với sự giúp đỡ của một ví dụ

Giả sử một lớp A, trong lớp chúng ta đã thực hiện một hàm show có một hàm tạo self và

đối số với giá trị mặc định Không có và Không có. Sau đó, tôi đã tạo một đối tượng và thực hiện chức năng

với đối tượng obj. hiển thị, nhưng tôi không cung cấp bất kỳ đối số nào, mặc dù thực tế là nó sẽ hiển thị Không có

và Không có vì chúng tôi đặt giá trị mặc định trong vùng chức năng

class A:
def show(self, a=None, b=None):
print(a,b)
obj=A()
obj.show()
None None

Để cung cấp một giá trị khác, bây giờ tôi phải sử dụng một phương thức khác obj. show() với một đối số

>>>print(2*7)
14
>>>print("a"*3)
aaa
0
>>>print(2*7)
14
>>>print("a"*3)
aaa
1

Giá trị Không được cung cấp cho một trong phần chức năng được thay thế bằng 4 trong đầu ra. Phần 4 được đưa ra

làm đối số cho lời gọi hàm

Bây giờ, hãy xem điều gì sẽ xảy ra nếu chúng ta gửi hai đối số đến lệnh gọi hàm trong ví dụ sau

>>>print(2*7)
14
>>>print("a"*3)
aaa
2____13

Do thực tế là chúng tôi đã gửi hai tham số 4 và 5 trong khi gọi hàm, hai giá trị riêng biệt cho một

Vì vậy, trong ví dụ trước, chúng ta đã thấy cách chúng ta có thể sử dụng cùng một phương thức và gọi các hàm riêng biệt

Hãy xem xét một ví dụ khác trong đó chúng ta đã sử dụng các câu lệnh điều kiện để gọi một số hàm trong

>>>print(2*7)
14
>>>print("a"*3)
aaa
4

>>>print(2*7)
14
>>>print("a"*3)
aaa
5

Nếu không có đối số nào được cung cấp trong khi gọi hàm, thì không có giá trị nào được gán;

Di sản

Trước khi chúng ta tìm hiểu về ghi đè phương thức, cần phải hiểu tính kế thừa ban đầu của Python. Kế thừa là phương thức mà một lớp có thể được dẫn xuất từ ​​bất kỳ lớp cơ sở nào, với lớp dẫn xuất kế thừa tất cả các thuộc tính của lớp cơ sở. Tính kế thừa làm giảm bớt thách thức của việc viết lặp đi lặp lại cùng một mã và tăng cường khả năng sử dụng lại

>>>print(2*7)
14
>>>print("a"*3)
aaa
6

>>>print(2*7)
14
>>>print("a"*3)
aaa
7

Ghi đè phương thức

Ghi đè phương thức là quá trình thay đổi một lớp cơ sở bằng cách sử dụng các phương thức và tham số của lớp dẫn xuất

Hãy xem xét một ví dụ để chứng minh nó hoạt động như thế nào. Để bắt đầu, chúng ta sẽ thiết kế một lớp cơ sở chứa một phương thức và sau đó là một lớp dẫn xuất không chứa các phương thức

>>>print(2*7)
14
>>>print("a"*3)
aaa
8

Kết quả là khi hàm được gọi, đầu ra sẽ hiển thị phương thức của lớp cơ sở, vì lớp dẫn xuất thiếu phương thức

>>>print(2*7)
14
>>>print("a"*3)
aaa
9

Bây giờ, trong ví dụ sau, chúng ta định nghĩa một phương thức khác có cùng tên với lớp cơ sở nhưng với một tham số khác trong lớp dẫn xuất. Do phương thức của lớp cơ sở đã bị lớp dẫn xuất ghi đè nên đầu ra sẽ chỉ bao gồm phương thức của lớp dẫn xuất

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
0

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
1

Do phương thức của lớp cơ sở đã bị ghi đè nên phương thức của lớp cơ sở không thể được gọi bình thường. Như vậy, để gọi phương thức của lớp cơ sở, chúng ta phải sử dụng hàm super trong phương thức được ghi đè của lớp dẫn xuất

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
2

class Vehicle:
    def __init__(self, fare):
        self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
3

gõ vịt

Gõ vịt là một khái niệm đa hình. Thuật ngữ gõ vịt có nguồn gốc từ một câu tục ngữ nói rằng

mọi thứ đi như vịt kêu quạc quạc như vịt và bơi như vịt đều được gọi là vịt

bất kể mặt hàng nào. Về cơ bản, nó chỉ ra rằng nếu bất cứ điều gì phù hợp với hành vi của nó với hành vi khác, thì nó

Khi thảo luận về lập trình hướng đối tượng trong Python, từ đa hình không thể tránh khỏi được sử dụng

Trong lập trình hướng đối tượng, các đối tượng phải có nhiều hình dạng khác nhau. Đặc tính này rất quan trọng trong

phát triển phần mềm. Cùng một hành động có thể được thực hiện theo nhiều cách khác nhau do tính đa hình

Khái niệm này thường được sử dụng trong khi thảo luận về khớp nối lỏng lẻo, nội xạ phụ thuộc và giao diện, giữa các

Phần kết luận

Do đó, đa hình đơn giản hóa và cải thiện khả năng đọc mã. Nó cũng làm giảm độ khó đọc và tiết kiệm nhiều dòng mã. Đa hình là một khái niệm rất hữu ích trong lập trình hướng đối tượng cũng có thể được sử dụng trong các trường hợp thực tế. Rốt cuộc, Thế giới thực và Đa hình là những người bạn tuyệt vời

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả

Tính đa hình có khả thi trong Python không?

Giống như trường hợp của các ngôn ngữ lập trình khác như Java và C++, tính đa hình được triển khai trong Python cho nhiều mục đích khác nhau, đáng chú ý nhất là . Tính đa hình này có thể được thực hiện theo hai cách riêng biệt. quá tải và ghi đè.

Ví dụ về tính đa hình trong Python là gì?

Ví dụ 1. Đa hình trong toán tử bổ sung . 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 phép nối. Kết quả là chương trình trên xuất ra Lập trình Python. For integer data types, + operator is used to perform arithmetic addition operation. Hence, the above program outputs 3 . Similarly, for string data types, + operator is used to perform concatenation. As a result, the above program outputs Python Programming .

Python có hỗ trợ các phương thức đa hình không?

Có, Python hỗ trợ tính đa hình . Từ đa hình có nghĩa là có nhiều dạng. Đa hình là một tính năng quan trọng của định nghĩa lớp trong Python được sử dụng khi bạn có các phương thức được đặt tên thông thường trên các lớp hoặc lớp con.

Một ví dụ tốt về đa hình là gì?

Một ví dụ thực tế về tính đa hình là một người đồng thời có thể có các đặc điểm khác nhau . Một người đàn ông đồng thời là một người cha, một người chồng và một nhân viên. Vì vậy, cùng một người thể hiện hành vi khác nhau trong các tình huống khác nhau. Điều này được gọi là đa hình.