Hướng dẫn operator overriding in python - ghi đè toán tử trong python

Nạp chồng (hàm) toán tử (Operator Overloading) có nghĩa là đưa ra những ý nghĩa đã được mở rộng hơn, vượt ra ngoài ý nghĩa được xác định ban đầu về mặt vận hành của một (hàm) toán tử. Ví dụ, toán tử + được sử dụng để cộng hai số nguyên, để nối hai chuỗi lại với nhau, và hợp nhất hai danh sách. Sở dĩ có thể đạt được điều này là do toán tử ‘+’ đã được nạp chồng bởi class int và class str. Bạn có thể đã nhận ra rằng, mặc dù cùng là một toán tử hoặc một hàm đã được tích hợp sẵn, nhưng chúng sẽ có những chức năng khác nhau dành cho các đối tượng thuộc các kiểu class khác nhau, điều này được gọi là nạp chồng toán tử (Operator Overloading).

# Đoạn chương trình Python mô tả cách sử dụng


# Python program to show use of 
# + operator for different purposes. 
  
print(1 + 2) 
  
# concatenate two strings 
print("Cafedevn"+"For")  
  
# Product two numbers 
print(3 * 4) 
  
# Repeat the String 
print("Cafe"*4) 

Kết quả in ra là:

3
CafedevnFor
12
CafeCafeCafeCafe

Giả sử chúng ta có hai đối tượng thuộc một kiểu class do người dùng tự định nghĩa và chúng ta phải động hai đối tượng này bằng toán tử ‘+’, nếu chúng ta cứ thế mà làm thì chắc chắn trình biên dịch sẽ đưa ra một thông báo lỗi, bởi vì trình biên dịch không biết được cách để cộng hai đối tượng này. Vì vậy, chúng ta sẽ phải tự định nghĩa một phương thức (method) dành cho một toán tử cụ thể, để có thể thu được toán tử hoạt động theo ý mình, quá trình này được gọi là nạp chồng toán tử. Chúng ta có thể nạp chồng tất cả các toán tử hiện có, nhưng không thể tạo ra toán tử mới. Để thực hiện nạp chồng toán tử, Python cung cấp một số hàm đặc biệt hoặc hàm ma thuật (magic function), có khả năng tự động được gọi khi nó được liên kết (associated) với một toán tử cụ thể nào đó. Trong ví dụ dưới đây, khi chúng ta sử dụng toán tử + để cộng hai đối tượng kiểu chuỗi (không phải kiểu int), phương thức ma thuật (magic method) __add__ sẽ tự động được gọi:

Ví dụ 1:

# Đoạn chương trình Python Program minh họacách để nạp chồng một hàm toán tử + hai ngôi 


# Python Program illustrate how  
# to overload an binary + operator 
  
class A: 
    def __init__(self, a): 
        self.a = a 
  
    # adding two objects  
    def __add__(self, o): 
        return self.a + o.a  
ob1 = A(1) 
ob2 = A(2) 
ob3 = A("Cafedevn") 
ob4 = A("For") 
  
print(ob1 + ob2) 
print(ob3 + ob4) 

Kết quả in ra là::

3
CafedevnFor

Giả sử chúng ta có hai đối tượng thuộc một kiểu class do người dùng tự định nghĩa và chúng ta phải động hai đối tượng này bằng toán tử ‘+’, nếu chúng ta cứ thế mà làm thì chắc chắn trình biên dịch sẽ đưa ra một thông báo lỗi, bởi vì trình biên dịch không biết được cách để cộng hai đối tượng này. Vì vậy, chúng ta sẽ phải tự định nghĩa một phương thức (method) dành cho một toán tử cụ thể, để có thể thu được toán tử hoạt động theo ý mình, quá trình này được gọi là nạp chồng toán tử. Chúng ta có thể nạp chồng tất cả các toán tử hiện có, nhưng không thể tạo ra toán tử mới. Để thực hiện nạp chồng toán tử, Python cung cấp một số hàm đặc biệt hoặc hàm ma thuật (magic function), có khả năng tự động được gọi khi nó được liên kết (associated) với một toán tử cụ thể nào đó. Trong ví dụ dưới đây, khi chúng ta sử dụng toán tử + để cộng hai đối tượng kiểu chuỗi (không phải kiểu int), phương thức ma thuật (magic method) __add__ sẽ tự động được gọi:

Ví dụ 1::

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# Python Program to perform addition  
# of two complex numbers using binary  
# + operator overloading. 
  
class complex: 
    def __init__(self, a, b): 
        self.a = a 
        self.b = b 
  
     # adding two objects  
    def __add__(self, other): 
        return self.a + other.a, self.b + other.b 
  
    def __str__(self): 
        return self.a, self.b 
  
Ob1 = complex(1, 2) 
Ob2 = complex(2, 3) 
Ob3 = Ob1 + Ob2 
print(Ob3) 

Kết quả in ra là::

(3, 5)

Giả sử chúng ta có hai đối tượng thuộc một kiểu class do người dùng tự định nghĩa và chúng ta phải động hai đối tượng này bằng toán tử ‘+’, nếu chúng ta cứ thế mà làm thì chắc chắn trình biên dịch sẽ đưa ra một thông báo lỗi, bởi vì trình biên dịch không biết được cách để cộng hai đối tượng này. Vì vậy, chúng ta sẽ phải tự định nghĩa một phương thức (method) dành cho một toán tử cụ thể, để có thể thu được toán tử hoạt động theo ý mình, quá trình này được gọi là nạp chồng toán tử. Chúng ta có thể nạp chồng tất cả các toán tử hiện có, nhưng không thể tạo ra toán tử mới. Để thực hiện nạp chồng toán tử, Python cung cấp một số hàm đặc biệt hoặc hàm ma thuật (magic function), có khả năng tự động được gọi khi nó được liên kết (associated) với một toán tử cụ thể nào đó. Trong ví dụ dưới đây, khi chúng ta sử dụng toán tử + để cộng hai đối tượng kiểu chuỗi (không phải kiểu int), phương thức ma thuật (magic method) __add__ sẽ tự động được gọi:: Nạp chồng các toán tử so sánh trong Python


# Python program to overload 
# a comparison operators  
  
class A: 
    def __init__(self, a): 
        self.a = a 
    def __gt__(self, other): 
        if(self.a>other.a): 
            return True
        else: 
            return False
ob1 = A(2) 
ob2 = A(3) 
if(ob1>ob2): 
    print("ob1 is greater than ob2") 
else: 
    print("ob2 is greater than ob1") 

Kết quả in ra là::

ob2 is greater than ob1

Giả sử chúng ta có hai đối tượng thuộc một kiểu class do người dùng tự định nghĩa và chúng ta phải động hai đối tượng này bằng toán tử ‘+’, nếu chúng ta cứ thế mà làm thì chắc chắn trình biên dịch sẽ đưa ra một thông báo lỗi, bởi vì trình biên dịch không biết được cách để cộng hai đối tượng này. Vì vậy, chúng ta sẽ phải tự định nghĩa một phương thức (method) dành cho một toán tử cụ thể, để có thể thu được toán tử hoạt động theo ý mình, quá trình này được gọi là nạp chồng toán tử. Chúng ta có thể nạp chồng tất cả các toán tử hiện có, nhưng không thể tạo ra toán tử mới. Để thực hiện nạp chồng toán tử, Python cung cấp một số hàm đặc biệt hoặc hàm ma thuật (magic function), có khả năng tự động được gọi khi nó được liên kết (associated) với một toán tử cụ thể nào đó. Trong ví dụ dưới đây, khi chúng ta sử dụng toán tử + để cộng hai đối tượng kiểu chuỗi (không phải kiểu int), phương thức ma thuật (magic method) __add__ sẽ tự động được gọi:: Nạp chồng toán tử bằng và toán tử nhỏ hơn:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# Python program to overload equality 
# and less than operators 
  
class A: 
    def __init__(self, a): 
        self.a = a 
    def __lt__(self, other): 
        if(self.a

Kết quả in ra là::

ob1 is lessthan ob2
Not equal

Giả sử chúng ta có hai đối tượng thuộc một kiểu class do người dùng tự định nghĩa và chúng ta phải động hai đối tượng này bằng toán tử ‘+’, nếu chúng ta cứ thế mà làm thì chắc chắn trình biên dịch sẽ đưa ra một thông báo lỗi, bởi vì trình biên dịch không biết được cách để cộng hai đối tượng này. Vì vậy, chúng ta sẽ phải tự định nghĩa một phương thức (method) dành cho một toán tử cụ thể, để có thể thu được toán tử hoạt động theo ý mình, quá trình này được gọi là nạp chồng toán tử. Chúng ta có thể nạp chồng tất cả các toán tử hiện có, nhưng không thể tạo ra toán tử mới. Để thực hiện nạp chồng toán tử, Python cung cấp một số hàm đặc biệt hoặc hàm ma thuật (magic function), có khả năng tự động được gọi khi nó được liên kết (associated) với một toán tử cụ thể nào đó. Trong ví dụ dưới đây, khi chúng ta sử dụng toán tử + để cộng hai đối tượng kiểu chuỗi (không phải kiểu int), phương thức ma thuật (magic method) __add__ sẽ tự động được gọi:Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:

Ví dụ 1:

# Đoạn chương trình Python Program minh họacách để nạp chồng một hàm toán tử + hai ngôi  Qua ví dụ 1, bạn có thể thấy rằng, thông qua việc thay đổi phần code bên trong hàm ma thuật, chúng ta có thể cải tiến được chức năng của hàm toán tử + theo ý của mình (một cách hợp lý).
Ví dụ 2:Ví dụ 3: Nạp chồng các toán tử so sánh trong Python
Ví dụ 4: Nạp chồng toán tử bằng và toán tử nhỏ hơn:2. Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:
– Các toán tử hai ngôi (Binary Operators):Toán tử
Phương thức ma thuật (magic method) +
__add__(self, other)
__sub__(self, other) *
__mul__(self, other) /

__truediv__(self, other)

# Đoạn chương trình Python Program minh họacách để nạp chồng một hàm toán tử + hai ngôi  Qua ví dụ 1, bạn có thể thấy rằng, thông qua việc thay đổi phần code bên trong hàm ma thuật, chúng ta có thể cải tiến được chức năng của hàm toán tử + theo ý của mình (một cách hợp lý).
Ví dụ 2:Ví dụ 3: Nạp chồng các toán tử so sánh trong Python
Ví dụ 4: Nạp chồng toán tử bằng và toán tử nhỏ hơn:2. Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:
– Các toán tử hai ngôi (Binary Operators):Toán tử
Phương thức ma thuật (magic method) +
__add__(self, other)
__sub__(self, other) *

__mul__(self, other)

# Đoạn chương trình Python Program minh họacách để nạp chồng một hàm toán tử + hai ngôi  Qua ví dụ 1, bạn có thể thấy rằng, thông qua việc thay đổi phần code bên trong hàm ma thuật, chúng ta có thể cải tiến được chức năng của hàm toán tử + theo ý của mình (một cách hợp lý).
Ví dụ 2:Ví dụ 3: Nạp chồng các toán tử so sánh trong Python
Ví dụ 4: Nạp chồng toán tử bằng và toán tử nhỏ hơn:2. Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:
– Các toán tử hai ngôi (Binary Operators):Toán tử
Phương thức ma thuật (magic method) +
__add__(self, other)
__sub__(self, other) *
__mul__(self, other) /

__truediv__(self, other)

# Đoạn chương trình Python Program minh họacách để nạp chồng một hàm toán tử + hai ngôi  Qua ví dụ 1, bạn có thể thấy rằng, thông qua việc thay đổi phần code bên trong hàm ma thuật, chúng ta có thể cải tiến được chức năng của hàm toán tử + theo ý của mình (một cách hợp lý).
Ví dụ 4: Nạp chồng toán tử bằng và toán tử nhỏ hơn:2. Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:
Ví dụ 2:Ví dụ 3: Nạp chồng các toán tử so sánh trong Python
Ví dụ 4: Nạp chồng toán tử bằng và toán tử nhỏ hơn:2. Danh sách các phương thức ma thuật hoặc hàm đặc biệt dành cho nạp chồng toán tử trong Python:
  • – Các toán tử hai ngôi (Binary Operators):
  • Toán tử

Phương thức ma thuật (magic method)

  • +
  • __add__(self, other)
  • __sub__(self, other)
  • *
  • __mul__(self, other)
  • /
  • __truediv__(self, other)

//

__floordiv__(self, other)