Đa hình Python W3schools

Giống như Java và C++, Python cũng dựa trên Khái niệm OOP, tôi. e, Python là ngôn ngữ lập trình hướng đối tượng sử dụng các lớp và đối tượng để tính toán

Ưu điểm của Python là ngôn ngữ lập trình hướng đối tượng

  • Phát triển và bảo trì mã Python dễ hơn lập trình thủ tục
  • Python có thể dễ dàng giải quyết các vấn đề trong thế giới thực vì nó không hoạt động theo hướng dẫn từng bước
  • Dữ liệu trong mã Python được bảo mật nhờ tính năng ẩn dữ liệu đặc biệt của nó

Nguyên tắc của OOP

Một lập trình hướng đối tượng dựa trên bảy nguyên tắc cơ bản

  1. Mục tiêu
  2. Tầng lớp
  3. Phương pháp
  4. Di sản
  5. đa hình
  6. đóng gói
  7. Trừu tượng dữ liệu

 

Đối tượng Python

Bất cứ thứ gì có trạng thái và hành vi đều có thể được gọi là Đối tượng, có thể là vật lý hoặc logic. Đối tượng là một thực thể được đề cập trong khái niệm OOP và thường được tìm thấy trong mã Python

Lớp Python

Một tập hợp các Đối tượng được gọi là Lớp trong khái niệm OOP. Mỗi lớp có các thuộc tính và phương thức duy nhất và có thể phân biệt được

Phương pháp Python

Phương thức tương tự như hàm. Nó chỉ là một tên được đặt cho một chức năng được liên kết với một đối tượng. Đó là, trong khái niệm OOP, chức năng được gọi là Phương thức. Trong Python, đối tượng thuộc bất kỳ loại nào cũng có thể có các phương thức không nhất thiết là duy nhất cho bất kỳ thể hiện của lớp nào

Di sản

Thuộc tính có được tất cả các thuộc tính và hành vi của đối tượng cha bởi một đối tượng được gọi là tính kế thừa trong OOP. Đây là một tính năng độc đáo trong các ngôn ngữ lập trình hướng đối tượng, tạo điều kiện cho việc sử dụng lại mã của lớp cha bởi lớp dẫn xuất

đa hình

OOP dựa trên nguyên tắc Đa hình, có nghĩa là một tác vụ có thể được thực hiện theo nhiều cách

đóng gói

OOP hạn chế quyền truy cập trực tiếp vào các phương thức và biến của nó bằng cách đóng gói mã và dữ liệu lại với nhau

Trừu tượng dữ liệu

Tính năng Trừu tượng hóa dữ liệu OOPS được sử dụng để ẩn các chi tiết bên trong và chỉ hiển thị chức năng

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, bò, v.v. Điều đó có nghĩa là một lớp động vật chung bao gồm các dạng khác nhau tồn tại ở nhiều dạng và hình dạng khác nhau và có các chức năng khác nhau. Toàn bộ điều này có thể được định nghĩa bởi một thuật ngữ duy nhất gọi là đa hình. Đa hình trong python là thứ được sử dụng để mô tả khả năng có nhiều dạng khác nhau. Từ này có nguồn gốc từ hai từ khác nhau poly có nghĩa là nhiều và hình thái có nghĩa là hình thức.  

Lớp và đối tượng

Lớp là một kế hoạch chi tiết mà từ đó một đối tượng có thể được tạo ra. Trong ví dụ được đưa ra dưới đây, chúng tôi đã tạo một lớp và đặt tên là A và khai báo một biến x, sau đó một giá trị được truyền vào đó. Một đối tượng được tạo để in giá trị của x

Thí dụ. Một ví dụ đơn giản hiển thị lớp và đối tượng trong python

class A:
  x = 5
object = A()
print(object.x)

đầu ra

5

Hàm tạo

Constructor là một loại chương trình con trong lập trình hướng đối tượng. Trình xây dựng được sử dụng để gán giá trị cho các thành viên dữ liệu khi một đối tượng được tạo bên trong một lớp. Hàm  __init__() được sử dụng làm hàm tạo trong python hầu như mỗi khi chúng ta tạo một đối tượng. Trong tính đa hình, chúng tôi sử dụng chức năng __init__() này ở hầu hết mọi nơi

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

Đa hình trong python được dùng chung cho một tên hàm có thể dùng cho nhiều kiểu khác nhau. Khái niệm này được áp dụng rộng rãi trong lập trình python dựa trên hướng đối tượng. Giống như các ngôn ngữ lập trình khác như Java, C+, tính đa hình cũng được triển khai trong python cho các mục đích khác nhau, thường là Duck Typing, Nạp chồng toán tử và Nạp chồng phương thức và Ghi đè phương thức. Quá trình đa hình này có thể đạt được theo hai cách chính là quá tải và ghi đè.  

Một ví dụ đơn giản về tính đa hình trong python

>>>4+5

9

>>>”4”+”5”

45

>>>”ab”+”cd”

A B C D

Trong ví dụ trên, chúng ta có thể thấy rõ rằng toán tử cộng được sử dụng theo cách khác.   

Trong ví dụ đầu tiên, vì dữ liệu được gửi là hai giá trị nguyên, toán tử đã thực hiện phép toán cộng hai số.  

Và trong ví dụ thứ hai, vì các giá trị giống nhau được gửi dưới dạng dữ liệu ở dạng chuỗi và cùng một toán tử đã thực hiện nối (ghép nối là quá trình nối hai chuỗi từ đầu đến cuối) của hai chuỗi.  

Trong ví dụ thứ ba, dữ liệu được gửi là hai chuỗi nhưng toán tử giống như trên và nó thực hiện nối hai chuỗi

>>>”3”+”ab”

3ab

Trong ví dụ này, toán tử cộng đã thực hiện nối hai chuỗi mặc dù giá trị đầu tiên là một số nguyên nhưng ở đây trong ví dụ cụ thể này, nó được gửi dưới dạng chuỗi.  

Vì vậy, đây là một vài ví dụ cơ bản về 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 chia 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à kiểu nạp chồng trong đó một toán tử có thể được sử dụng theo nhiều cách ngoài ý nghĩa được xác định trước của nó

>>>in(2*7)

14

>>>in(”a”*3)

aa

Vì vậy, trong ví dụ trên, toán tử nhân đã thực hiện phép nhân hai số trong số đầu tiên, nhưng trong số thứ hai, vì phép nhân của một chuỗi và một số nguyên là không thể nên ký tự  được in lặp lại 3 lần. Vì vậy, nó cho thấy cách chúng ta có thể sử dụng một toán tử theo cách khác

Thực hành quá tải toán tử

ví dụ 1

class Vehicle:
    def __init__(self, fare):
        self.fare = fare

bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)

đầu ra

Traceback (cuộc gọi gần đây nhất cuối cùng)

  File “G:\python pycharm project\main.py”, line 7, in

total_fare=xe buýt+xe hơi

LoạiLỗi. (các) loại toán hạng không được hỗ trợ cho +. 'Xe' và 'Xe'

Ở đây trong ví dụ trên đã xảy ra lỗi, điều này là do python không biết cách thêm hai đối tượng lại với nhau. Ở đây Xe là đối tượng.  

Bây giờ đến phần ứng dụng nạp chồng toán tử đây.  

Bây giờ chúng ta sẽ nạp chồng toán tử __add__  hàm đặc biệ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)

đầu ra

50

Nạp chồng hàm đặc biệt xác định một cách kỳ diệu mỗi khi chúng ta sử dụng  toán tử cộng trong đối tượng total_fare=bus+car  chúng ta sẽ thêm giá vé của chúng
ví dụ 2. Hãy để chúng tôi so sánh giá vé của các phương tiện khác nhau trong ví dụ này

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)

đầu ra

Thật

__lt__  Đó là toán tử quan hệ được sử dụng như một hàm đặc biệt để nạp chồng toán tử trong ví dụ trên

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

Nạp chồng phương thức có nghĩa là một lớp chứa nhiều phương thức có cùng tên nhưng có thể có các đối số khác nhau. Về cơ bản python không hỗ trợ nạp chồng phương thức, nhưng có một số cách để nạp chồng phương thức. Mặc dù có thể đạt được quá tải phương thức, nhưng chỉ có thể sử dụng được các phương thức được xác định cuối cùng

Hãy lấy một ví dụ để hiểu rõ hơn

Hãy xem xét 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 và các đối số có giá trị mặc định được gán là Không có và Không có. Sau đó, tôi đã tạo một đối tượng và gọi hàm với đối tượng obj. hiển thị, nhưng tôi đã không chuyển bất kỳ đối số nào mặc dù nó sẽ in Không và Không vì trong phần hàm chúng tôi đã gán các giá trị mặc định

Thí dụ

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

obj=A()
obj.show()

đầu ra

Không  Không

Bây giờ nếu tôi muốn chuyển bất kỳ giá trị nào khác thì tôi phải gọi hàm khác obj. show() với một đối số trong đó

Thí dụ

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

obj=A()
obj.show()
obj.show(4)

đầu ra

Không có Không có

4 Không có

Ở đây, trong đầu ra, giá trị Không được gán cho a trong phần chức năng được thay thế bằng 4. Trong phần gọi hàm, phần 4 được truyền dưới dạng đối số

Bây giờ nếu chúng ta truyền hai đối số trong khi gọi hàm, hãy xem điều gì sẽ xảy ra trong ví dụ tiếp theo,

Thí dụ

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

obj=A()
obj.show()
obj.show(4)
obj.show(4,5)

đầu ra

Không có Không có

4

4 5

Ở đây khi chúng ta truyền hai đối số 4 và 5 trong khi gọi hàm, hai giá trị khác nhau được gán cho a và b

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

Hãy xem một ví dụ khác mà chúng ta đã sử dụng các câu điều kiện để gọi các hàm khác nhau theo những cách khác nhau

Thí dụ

class Area:
    def find_area(self, a=None, b=None):
        if a != None and b != None:
            print("Rectangle:", (a * b))
        elif a != None:
            print("square:", (a * a))
        else:
            print("No figure assigned")

obj1=Area()
obj1.find_area()
obj1.find_area(10)
obj1.find_area(10,20)

đầu ra

Không có con số được chỉ định

Quảng trường. 100

hình chữ nhật. 200

Trong ví dụ trên nếu không có đối số nào được truyền trong khi gọi hàm thì nó sẽ không hiển thị giá trị được gán, nếu chúng ta truyền 1 đối số thì nó sẽ hiển thị diện tích hình vuông và nếu 2 giá trị được truyền vào thì nó sẽ hiển thị diện tích hình chữ nhật

Di sản

Trước khi tìm hiểu về Ghi đè phương thức, chúng ta cần biết Kế thừa đầu tiên trong python. Kế thừa là quá trình mà qua đó một lớp có thể được dẫn xuất từ ​​bất kỳ lớp cơ sở nào mà qua đó lớp dẫn xuất có thể kế thừa tất cả các thuộc tính từ lớp cơ sở. Kế thừa làm giảm vấn đề viết đi viết lại cùng một mã và tăng khả năng sử dụng lại

Ví dụ về thừa kế

________số 8_______

đầu ra

Chim sẻ tweet
tiếng chim
Ghi đè phương thức

Ghi đè phương thức là quá trình sửa đổi một lớp cơ sở từ lớp dẫn xuất có cùng phương thức và cùng số đối số

Hãy lấy một ví dụ và xem nó hoạt động như thế nào. Trước hết chúng ta sẽ tạo một lớp cơ sở với một phương thức và sau đó tạo một lớp dẫn xuất không có bất kỳ phương thức nào,

Thí dụ

class Vehicle:
    def run(self):
        print("Saves Energy")
class EV(Vehicle):
    pass


ev = EV()
ev.run()

Vì vậy, khi hàm được gọi, đầu ra sẽ in phương thức của lớp cơ sở, vì lớp dẫn xuất không có phương thức nào trong đó.  

đầu ra

Tiết kiệm năng lượng

Bây giờ trong ví dụ tiếp theo, chúng ta khai báo một phương thức khác trong lớp dẫn xuất có cùng tên với lớp cơ sở nhưng với đối số khác. Vì phương thức của lớp cơ sở hiện đã bị lớp dẫn xuất ghi đè nên chỉ có phương thức của lớp dẫn xuất sẽ được in dưới dạng đầu ra

Thí dụ

class Vehicle:
    def __init__(self, fare):
        self.fare = fare

bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
0

đầu ra

Chạy bằng điện

Hàm siêu ()

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

Thí dụ

class Vehicle:
    def __init__(self, fare):
        self.fare = fare

bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
1

đầu ra

Tiết kiệm năng lượng

Chạy bằng điện

gõ vịt

Gõ vịt là một khái niệm trong đa hình. Thuật ngữ gõ vịt bắt nguồn từ câu trích dẫn nói rằng thứ gì đó đi như vịt kêu quạc quạc như vịt và bơi như vịt được gọi là vịt cho dù đó là vật gì. Nói một cách đơn giản, nó có nghĩa là thứ gì đó phù hợp với hành vi của nó với bất kỳ thứ gì, sau đó nó sẽ xem xét một thứ thuộc danh mục mà nó phù hợp.

Tại sao đa hình cần thiết?

Khi nói về lập trình hướng đối tượng trong python, thuật ngữ đa hình chắc chắn sẽ xuất hiện. Trong lập trình hướng đối tượng, các đối tượng cần có các dạng khác nhau. Trong phát triển phần mềm, tính năng này khá quan trọng. Thông qua tính đa hình, một hành động có thể được thực hiện theo nhiều cách khác nhau. Khái niệm này được sử dụng rộng rãi khi chúng ta nói về khớp nối lỏng lẻo, tiêm phụ thuộc và giao diện, v.v.

Đa hình trong Python là gì?

Nghĩa đen của tính đa hình là điều kiện xuất hiện ở 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 đơn (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.

Tính đa hình có được phép trong Python 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.

Tính đa hình trong Python với ví dụ thực tế là gì?

Đa hình toán tử . Ví dụ: nếu dấu + hoạt động trên hai số nguyên, kết quả sẽ là phép cộng, trả về tổng của hai số nguyên . Trong ví dụ trên, toán tử + thêm 10 và 15 , sao cho đầu ra là 25.

Đa hình với ví dụ là gì?

Từ “đa hình” có nghĩa là có nhiều dạng. Nói một cách đơn giản, chúng ta có thể định nghĩa tính đa hình là khả năng một thông báo được hiển thị ở nhiều dạng . Một ví dụ thực tế về tính đa hình là một người đồng thời có thể có những đặc điểm khác nhau.