@overload trong Python là gì?

Quá tải toán tử trong Python có nghĩa là cung cấp ý nghĩa mở rộng ngoài ý nghĩa hoạt động được xác định trước của chúng. Chẳng hạn, chúng ta sử dụng toán tử "+" để cộng hai số nguyên cũng như nối hai chuỗi hoặc hợp nhất hai danh sách. Chúng ta có thể đạt được điều này khi toán tử "+" được nạp chồng bởi lớp "int" và lớp "str". Người dùng có thể nhận thấy rằng cùng một toán tử hoặc hàm sẵn có đang hiển thị các hành vi khác nhau cho các đối tượng thuộc các lớp khác nhau. Quá trình này được gọi là quá tải toán tử

Ví dụ

đầu ra

46
JavaTpoint
322
X Y Z X Y Z X Y Z

Làm cách nào để quá tải toán tử trong Python?

Giả sử người dùng có hai đối tượng là biểu diễn vật lý của lớp kiểu dữ liệu do người dùng định nghĩa. Người dùng phải thêm hai đối tượng bằng toán tử "+" và nó báo lỗi. Điều này là do trình biên dịch không biết cách thêm hai đối tượng. Vì vậy, người dùng phải xác định hàm để sử dụng toán tử và quá trình đó được gọi là "nạp chồng toán tử". Người dùng có thể quá tải tất cả các toán tử hiện có bằng cách họ không thể tạo bất kỳ toán tử mới nào. Python cung cấp một số hàm đặc biệt, hay có thể nói là hàm thần kỳ để thực hiện nạp chồng toán tử, hàm này sẽ tự động được gọi khi nó được liên kết với toán tử đó. Chẳng hạn, khi người dùng sử dụng toán tử "+", hàm ma thuật __add__ sẽ tự động gọi trong lệnh nơi toán tử "+" sẽ được xác định

Cách thực hiện toán tử "+" nhị phân trong Python

Khi người dùng sử dụng toán tử trên các kiểu dữ liệu do người dùng định nghĩa của lớp, thì một hàm ma thuật được liên kết với toán tử sẽ được gọi tự động. Quá trình thay đổi hành vi của toán tử đơn giản như hành vi của hàm hoặc phương thức được xác định

Người dùng định nghĩa các phương thức hoặc hàm trong lớp và toán tử hoạt động theo hành vi đó được xác định trong các hàm. Khi người dùng sử dụng toán tử "+", nó sẽ thay đổi mã của hàm ma thuật và người dùng có thêm ý nghĩa của toán tử "+"

chương trình 1. Chỉ cần thêm hai đối tượng

Chương trình Python đơn giản sử dụng toán tử nạp chồng để thêm hai đối tượng

Ví dụ

đầu ra

Please enter the value: 23
Please enter the value: 21
:  44
Please enter the value: Java
Please enter the value: Tpoint
:  JavaTpoint

chương trình 2. định nghĩa Quá tải toán tử trong một đối tượng khác

Chương trình Python để xác định toán tử nạp chồng bên trong một đối tượng khác

Ví dụ

đầu ra

chương trình 3. Nạp chồng toán tử so sánh trong Python

Chương trình Python nạp chồng toán tử so sánh

Ví dụ

đầu ra

Trường hợp 1

Please enter the value: 23
Please enter the value: 12
The object_1 is greater than object_2

trường hợp 2

Please enter the value: 20
Please enter the value: 31
The object_2 is greater than object_1

chương trình 4. Quá tải đẳng thức và nhỏ hơn toán tử

Chương trình Python để nạp chồng đẳng thức và nhỏ hơn toán tử

Ví dụ

đầu ra

Trường hợp 1

Please enter the value: 12
Please enter the value: 23
:  object_1 is less than object_2
Please enter the value: 2
Please enter the value: 2
:  Both the objects are equal

trường hợp 2

Please enter the value: 26
Please enter the value: 3
: object_2 is less than object_1
Please enter the value: 2
Please enter the value: 5
: Objects are not equal

Các hàm ma thuật Python được sử dụng để nạp chồng toán tử

toán tử nhị phân

Toán tửMagic Function+__add__[self, other]-__sub__[self, other]*__mul__[self, other]/__truediv__[self, other]//__floordiv__[self, other]%__mod__[self, other]**__pow__[self . __or__[bản thân, người khác]^__xor__[bản thân, người khác]

Toán tử so sánh

OperatorMagic Function__GT__[SELF, OTHER]=__GE__[SELF, OTHER]==__EQ__[SELF, OTHER]!=__NE__[SELF, OTHER]

Toán tử gán

OperatorMagic Function-=__ISUB__[SELF, OTHER]+=__IADD__[SELF, OTHER]*=__IMUL__[SELF, OTHER]/=__IDIV__[SELF, OTHER]//=__IFLOORDIV__[SELF, OTHER]%=__IMOD__[SELF, OTHER . =__IOR__[TỰ, KHÁC]^=__IXOR__[TỰ, KHÁC]

Toán tử một ngôi

Toán tửMagic Function-__NEG__[SELF, OTHER]+__POS__[SELF, OTHER]~__INVERT__[SELF, OTHER]

Phần kết luận

Trong hướng dẫn này, chúng ta đã thảo luận về nạp chồng toán tử trong Python và cách sử dụng chúng để thực hiện các toán tử khác nhau

Những gì bạn đang yêu cầu được gọi là nhiều công văn. Xem các ví dụ ngôn ngữ Julia thể hiện các loại công văn khác nhau

Tuy nhiên, trước khi xem xét điều đó, trước tiên chúng ta sẽ giải quyết lý do tại sao quá tải không thực sự là điều bạn muốn trong Python

Đầu tiên, người ta cần hiểu khái niệm quá tải và tại sao nó không áp dụng được cho Python

Khi làm việc với các ngôn ngữ có thể phân biệt các loại dữ liệu tại thời điểm biên dịch, việc chọn trong số các lựa chọn thay thế có thể xảy ra tại thời điểm biên dịch. Hành động tạo các hàm thay thế như vậy để lựa chọn thời gian biên dịch thường được gọi là quá tải một hàm. [Wikipedia]

Python là một ngôn ngữ được gõ động, vì vậy khái niệm quá tải đơn giản là không áp dụng cho nó. Tuy nhiên, tất cả không bị mất, vì chúng ta có thể tạo các chức năng thay thế như vậy trong thời gian chạy

Trong các ngôn ngữ lập trình trì hoãn nhận dạng kiểu dữ liệu cho đến thời gian chạy, việc lựa chọn giữa các hàm thay thế phải diễn ra trong thời gian chạy, dựa trên các loại đối số hàm được xác định động. Các chức năng có cách triển khai thay thế được chọn theo cách này được gọi chung nhất là đa phương thức. [Wikipedia]

Vì vậy, chúng ta sẽ có thể thực hiện đa phương thức trong Python—hay, như cách gọi khác của nó là. nhiều công văn

Đa phương thức còn được gọi là đa công văn

Đa gửi hoặc đa phương thức là tính năng của một số ngôn ngữ lập trình hướng đối tượng trong đó một hàm hoặc phương thức có thể được gửi động dựa trên loại thời gian chạy [động] của nhiều đối số của nó. [Wikipedia]

Python không hỗ trợ điều này ngay lập tức, nhưng, khi nó xảy ra, có một gói Python tuyệt vời có tên là multidispatch thực hiện chính xác điều đó

Đây là cách chúng tôi có thể sử dụng gói multipledispatch2 để triển khai các phương pháp của bạn

>>> from multipledispatch import dispatch
>>> from collections import namedtuple
>>> from types import *  # we can test for lambda type, e.g.:
>>> type[lambda a: 1] == LambdaType
True

>>> Sprite = namedtuple['Sprite', ['name']]
>>> Point = namedtuple['Point', ['x', 'y']]
>>> Curve = namedtuple['Curve', ['x', 'y', 'z']]
>>> Vector = namedtuple['Vector', ['x','y','z']]

>>> @dispatch[Sprite, Point, Vector, int]
.. def add_bullet[sprite, start, direction, speed]:
..     print["Called Version 1"]
...
>>> @dispatch[Sprite, Point, Point, int, float]
.. def add_bullet[sprite, start, headto, speed, acceleration]:
..     print["Called version 2"]
...
>>> @dispatch[Sprite, LambdaType]
.. def add_bullet[sprite, script]:
..     print["Called version 3"]
...
>>> @dispatch[Sprite, Curve, int]
.. def add_bullet[sprite, curve, speed]:
..     print["Called version 4"]
...

>>> sprite = Sprite['Turtle']
>>> start = Point[1,2]
>>> direction = Vector[1,1,1]
>>> speed = 100 #km/h
>>> acceleration = 5.0 #m/s**2
>>> script = lambda sprite: sprite.x * 2
>>> curve = Curve[3, 1, 4]
>>> headto = Point[100, 100] # somewhere far away

>>> add_bullet[sprite, start, direction, speed]
Called Version 1

>>> add_bullet[sprite, start, headto, speed, acceleration]
Called version 2

>>> add_bullet[sprite, script]
Called version 3

>>> add_bullet[sprite, curve, speed]
Called version 4

1. Python 3 hiện hỗ trợ một công văn 2. Cẩn thận không sử dụng multidispatch trong môi trường đa luồng, nếu không bạn sẽ có hành vi kỳ lạ

Ghi đè và quá tải trong Python là gì?

Quá tải phương thức là xác định hai hoặc nhiều phương thức có cùng tên nhưng khác tham số. Python không hỗ trợ nạp chồng phương thức. Ghi đè phương thức là định nghĩa lại một phương thức của lớp cha trong lớp dẫn xuất . Ghi đè yêu cầu kế thừa để thực hiện.

Ghi đè toán tử trong Python là gì?

Trăn. . Quá tải toán tử có nghĩa là cung cấp ý nghĩa mở rộng ngoài ý nghĩa hoạt động được xác định trước . Ví dụ: toán tử + được sử dụng để cộng hai số nguyên cũng như nối hai chuỗi và hợp nhất hai danh sách. Có thể đạt được vì toán tử '+' bị quá tải bởi lớp int và lớp str.

Việc sử dụng quá tải trong Python là gì?

Nạp chồng toán tử trong Python có nghĩa là cung cấp ý nghĩa mở rộng ngoài ý nghĩa hoạt động được xác định trước của chúng . Chẳng hạn, chúng ta sử dụng toán tử "+" để cộng hai số nguyên cũng như nối hai chuỗi hoặc hợp nhất hai danh sách. Chúng ta có thể đạt được điều này khi toán tử "+" được nạp chồng bởi lớp "int" và lớp "str".

Sự khác biệt giữa ghi đè và quá tải là gì?

Ghi đè xảy ra khi chữ ký phương thức giống nhau trong lớp cha và lớp con. Quá tải xảy ra khi hai hoặc nhiều phương thức trong cùng một lớp có cùng tên nhưng khác tham số

Chủ Đề