Nạp chồng toán tử trong python * là gì?

Người lập trình có thể sử dụng ngay các toán tử được xác định trước như +, =, *, >, <, v.v. trên các kiểu dữ liệu có sẵn để viết chương trình. Tuy nhiên, các toán tử này không hoạt động trong các kiểu dữ liệu do người dùng xác định. Do đó, Python đã đưa ra khả năng tải toán tử, cho phép lập trình viên xác định lại các toán tử khi làm việc trên các đối tượng lớp.   

Biết thêm về Self in Python bằng cách nhấp vào đây

Quá tải toán tử

Quá tải toán tử cho phép lập trình viên mở rộng ý nghĩa của các toán tử được xác định trước. Nói một cách đơn giản, nó cung cấp định nghĩa mở rộng về những gì được xác định trước, giúp lập trình viên dễ dàng làm việc liền mạch với cả loại dữ liệu cơ bản và loại dữ liệu do người dùng xác định.  

Operators Overloading

Ví dụ: toán tử ‘+’ sẽ cộng hai số, bằng cách cộng hai phạm vi hoặc kết hợp hai danh sách. Bạn có thể làm tương tự bằng cách nạp chồng toán tử '+' với lớp int và str. Người dùng có thể đã quan sát thấy rằng toán tử hoặc hàm tích hợp giống hệt nhau thể hiện một hành vi cụ thể đối với các thành phần của bất kỳ lớp Python cụ thể nào có tên là nạp chồng toán tử.  

Toán tử quá tải

Xem xét hai mục mô tả một lớp cụ thể, trong đó bạn phải chèn hai đối tượng bằng toán tử '+' nhị phân. Có thể nó sẽ báo lỗi trình biên dịch không hiểu cách thêm. Vì vậy, chúng tôi mô tả một cơ chế toán tử có tên nạp chồng toán tử. Python bao gồm một tính năng kỳ diệu để tiến hành nạp chồng toán tử được kích hoạt ngay lập tức sau khi được ghép nối với cùng một toán tử cụ thể này.  

  • Chẳng hạn, khi bạn đang sử dụng toán tử '+', dạng ma thuật __add__ có thể tự động mô tả thao tác của toán tử '+'.  
  • Với các bộ dựng sẵn, toán tử Python hoạt động tốt. Nhưng đối với các hình thức khác nhau, các nhà khai thác hành xử tương ứng. Ví dụ: trong hai số, toán tử '+' có thể áp dụng phép cộng, kết hợp hai danh sách hoặc hợp nhất nhiều chuỗi.  
  • Lập trình để thêm mà không làm quá tải toán tử ‘+’ 
class circle: 
    def __init__(object, radius): 
        object.radius = radius 
 
b1 = circle(10) 
b2 = circle(20) 
 
print(b1 + b2)  

đầu ra.   

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 

Ối. Chương trình không hoạt động và có thể hiển thị TypeError. Tại sao? . Vì vậy, làm cách nào chúng tôi có thể cho phép các toán tử này chạy trong vòng kết nối lớp thiết bị của mình?

Ở đây các "kỹ thuật ma thuật" nhập phương trình. Trong Python, các phương thức ma thuật bao gồm các quy trình duy nhất bắt đầu và kết thúc bằng __init__(). Kỹ thuật __str__() cũng là một phương pháp ma thuật khác trả về rõ ràng biểu diễn lò xo của các đối tượng.  

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

class circle: 
    def __init__(self, radius): 
        self.radius = radius 
    def __str__(self): 
        return "Radius of the circle is: " + str(self.radius) 
 
b1 = circle(10) 
print(b1)  

đầu ra.  

Radius of the circle is: 10 

Chúng ta hãy xem xét thêm một ví dụ để hiểu rõ hơn về quá tải.  

Chương trình trừ hai số phức mà không nạp chồng toán tử -

class Complex: 
 
    def __init__(self): 
        self.real = 0 
        self.imag = 0 
    def setValue(self,real,imag): 
        self.real = real 
        self.imag = imag 
    def display(self): 
        print(self.real, " + ", self.imag) 
 
C1 = Complex() 
C1.setValue(1,2) 
C2 = Complex() 
C2.setValue(3,4) 
C3 =Complex() 
C3 = C1 + C2 
C3.display() 

đầu ra.  

TypeError: unsupported operand type(s) for +: ‘Complex’ and ‘Complex’ 

Chương trình nạp chồng toán tử ‘-‘ trên một đối tượng phức tạp

 class Complex: 
    def __init__(self): 
        self.real = 0 
        self.imag = 0 
    def setValue(self,real,imag): 
        self.real = real 
        self.imag = imag 
    def __sub__(self,C): 
        Temp = Complex() 
        Temp.real = self.real - C.real 
        Temp.imag = self.imag - C.imag 
        return Temp 
    def display(self): 
        print("(", self.real, " - ", self.imag, "i)") 
 
C1 = Complex() 
C1.setValue(25,50) 
C2 = Complex() 
C2.setValue(5,10) 
C3 =Complex() 
C3 = C1 - C2 
print("RESULT = ", end="") 
C3.display() 

đầu ra.  

RESULT = ( 20  -  40 i) 

Trích xuất và chèn luồng

Nhiều ngôn ngữ lập trình như C, C++ và Java có thư viện chuẩn, cho phép lập trình viên trích xuất chuỗi, số và đối tượng từ luồng nhập văn bản mà không gặp rắc rối. Thật không may, không có sẵn một thư viện như vậy cho các lập trình viên Python. Python có giao diện luồng – các lớp kế thừa từ io. IOBase cung cấp phương tiện cho đầu vào định hướng theo dòng. Có lẽ nếu đầu vào của người dùng là tùy ý, thì mô-đun lại phải được xem xét chính.  

Tăng giảm

Bạn có thể quen thuộc với các toán tử tăng và giảm được biểu thị bằng + + và -  - riêng nếu bạn đã quen thuộc với C, Java hoặc PHP. Nhưng trong Python, dường như không có toán tử tăng hoặc giảm.  

Nghe có vẻ lạ, nhưng chúng ta viết mã + = hoặc x = x+ 2 bằng Python nếu muốn tăng giá trị biến lên 2 và chúng ta đang áp dụng - = hoặc làm x = x – 2 để giảm giá trị đó đi 2.  

Có thể giải thích về mặt khái niệm tại sao Python không có toán tử tăng và giảm có thể là do kết quả giống nhau được thu được thông qua + = hoặc - = một cách liền mạch.  

Mã Python để minh họa Increment Operator

________số 8

đầu ra.  

Increment Value = 6 

Mã Python để minh họa Toán tử giảm dần

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
0

đầu ra.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
1

Toán tử gán

Toán tử gán, như tên gợi ý, gán giá trị cho toán hạng. Chúng còn được gọi là toán tử tắt, vì chúng đã được sử dụng để phân bổ các giá trị biến. Toán tử cho phép gán giá trị của toán hạng ở vế phải của toán tử. Chẳng hạn, a = 4 là toán tử phân bổ đơn giản gán giá trị 4, từ phải sang biến bên trái a.  

Python Operators Overloading

Ghi chú. Đừng nhầm lẫn giữa các toán tử tại chỗ và phím tắt. Trong Python, chúng ta có = = toán tử hữu tỉ, có thể trông tương tự như toán tử gán.   

Lưu ý sự khác biệt.  

Với việc sử dụng toán tử gán, biến được gán với một giá trị, 4.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
2

Trong một toán tử quan hệ, biến kiểm tra điều kiện và hiển thị đầu ra ở giá trị Boolean. Nếu điều kiện biểu thức được thỏa mãn, đầu ra mã là Đúng, ngược lại là Sai.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
3

Toán tử số học nhị phân

Các toán tử số học như cộng, trừ, nhân, chia sàn, số mũ (hoặc lũy thừa) và mô đun đều có sẵn theo mặc định trong tất cả các ngôn ngữ lập trình. Trong Python, tất cả các toán tử số học này đều là nhị phân, cho thấy chúng đang chạy trên hai bộ điều khiển. Nói một cách đơn giản, chúng chạy trên hai toán tử.  

Người lập trình áp dụng các toán tử này trên số cũng như trên biến để thực hiện các phép toán tương ứng. Mức độ quan tâm chính thường xuyên được trao cho các hoạt động số học nhị phân. Lưu ý rằng một số dạng không phải là số của các hoạt động này thường xảy ra. Bên cạnh người dùng thành thạo, chỉ có hai thành phần, một thành phần dành cho nhiều toán tử và một danh mục dành cho toán tử phụ.  

Hãy cùng tìm hiểu các toán tử số học nhị phân với sự trợ giúp của một ví dụ. Gán a = 50 và b = 100, chúng tôi nhận được các đầu ra sau.  

Toán tử số học PythonOperationExampleOutput+Addition – cộng toán hạng(a+b)150-Phép trừ – trừ toán hạng bên phải khỏi toán hạng bên trái toán hạng(a-b)-50*Phép nhân – Nhân toán hạng(a*b)5000/ . in(b/a)2. 0%Modulus – Chia toán hạng ở bên trái của toán tử với toán hạng ở bên phải và trả về phần còn lại dưới dạng đầu ra. print(b%a)0//Phân chia tầng – Chia toán hạng ở bên trái của toán tử với toán hạng ở bên phải và trả về thương mà không có bất kỳ dấu thập phân nào. print(b//a)2**Số mũ – Nó làm tăng toán hạng ở phía bên trái của toán tử với toán hạng ở bên phải thực hiện phép tính hàm mũ. in(a**b)50100

Toán tử quan hệ

Toán tử quan hệ trong Python cũng thường được gọi là toán tử so sánh. Chúng nên đo lường và kiểm tra mối quan hệ giữa các toán hạng ở cả hai phía. Một giá trị Boolean xảy ra trong hiệu suất so sánh. Các toán tử này đang được sử dụng để khám phá mối liên hệ giữa hai toán hạng trong chương trình. Chúng rất hữu ích cho việc so sánh các giá trị. Nó trả lời Đúng hoặc Sai, tùy thuộc vào điều kiện.   

Hãy cho chúng tôi hiểu các toán tử quan hệ với sự trợ giúp của một ví dụ. Gán a = 50 và b = 100, chúng tôi nhận được các đầu ra sau.  

Python Relational OperatorsDescriptionExampleOutput==Returns True if the values at both operands on the left and the value of operator and operand are equal.print(a == b)False!=Returns True if the values at both operands on the left and the value of operator and operand are unequal.print(a != b)True>Returns True if the values at operand on the left are greater than the value of operator are equal.print(a >= b)False=Returns True if the values at operand on the left are greater than or equal to the value of operator are equal.print(a >= b)False<=Returns True if the values at operand on the left are lesser than or equal to the value of operator are equalprint(a <= b)True

Mảng

Mảng là một tập hợp các dạng thành phần giống nhau. Nói một cách đơn giản, nó lưu trữ chung nhiều dữ liệu cùng loại. Chúng có thể hữu ích nếu có nhu cầu khai thác các loại dữ liệu đó. Tuy nhiên, việc sắp xếp các mục được lưu trữ trong mảng có thể bị hạn chế nhiều bởi người dùng.   

Để tạo một mảng, chúng ta cần nhập một mô-đun mảng.  

Đây là đoạn mã mà chúng ta đã tạo một mảng kiểu int. Lưu ý chữ i là mã loại.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
4

đầu ra.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
5

Đây là đoạn mã mà chúng ta đã tạo một mảng kiểu float. Lưu ý chữ d là mã loại.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
6

đầu ra.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
7

Toán tử bitwise

Toán tử bitwise là toán tử trong Python chạy ở cấp độ nhị phân. Điều đó có nghĩa là các toán tử này xuất hiện cụ thể ở các số nhị phân hoặc các phần của một số nguyên. Phần lớn điều này có vẻ đáng sợ, nhưng nó rất dễ dàng cho các thao tác bit. So với các hệ điều hành khác, chúng tương đối nhanh vì các quy trình này có thể được bộ xử lý thực hiện ngay lập tức.   

Thay vì các từ, các toán tử bitwise chỉ được gắn nhãn bằng các dấu hiệu kỳ lạ, khiến chúng trông ít dài dòng hơn bạn có thể thấy trong Python. Toán tử bitwise bao gồm.  

  1. Theo chiều bit AND(&)
  2. Theo từng bit HOẶC(. )
  3. Bitwise XOR(^)
  4. Bitwise KHÔNG PHẢI (~)
  5. Shift Trái(<<)
  6. Chuyển Phải(>>)

Hạn chế của toán tử quá tải

Khi nạp chồng toán tử, lập trình viên có thể tự do nạp chồng bất kỳ toán tử số học nào ngoại trừ = toán tử. Quy tắc ngón tay cái nói. Đừng bao giờ thử quá tải = =toán tử, vì nó trở nên vất vả, gần như không thể xác minh kiểm tra xem hai đối tượng có giống nhau không. Giả sử bạn có một đối tượng x, thuộc một lớp tùy chỉnh hoặc là một số nguyên và bạn muốn xem x có phải là số 500 không. Nếu bạn đặt x = 500, sau đó kiểm tra nếu x là 500, bạn sẽ nhận được Sai do cách Python lưu các số vào bộ nhớ đệm.   

Toán tử phủ định Boolean

Khi cần đảo ngược ý nghĩa của toán hạng, chúng tôi sử dụng toán tử phủ định Boolean sử dụng từ khóa không. Toán tử này hoạt động bằng cách chỉ đảo ngược giá trị của toán hạng của nó. Nếu biểu thức bạn phải viết là True, đặt từ khóa 'không' trước nó sẽ trả về Sai và ngược lại

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

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
8

đầu ra.  

TypeError: unsupported operand type(s) for +: ‘circle’ and ‘circle’ 
9

N. B. Trong danh sách xác định có tên là lớp học, chúng tôi có bốn học sinh tham gia lớp học. Khi kiểm tra xem "Bella" có trong danh sách hay không, chúng tôi nhận được kết quả là Vắng mặt vì cô ấy có mặt. Thật tuyệt vời khi sử dụng từ khóa không có thể đảo ngược toàn bộ ý nghĩa của cụm từ.  

Nạp chồng hàm trong Python

Một trong những lợi ích của việc sử dụng Python là nạp chồng hàm, bên cạnh nạp chồng toán tử. Python cho phép quá tải các hàm như long(), float(), abs() và hex(). Chúng tôi có thể thay đổi tầm quan trọng của toán tử Python bên trong danh mục bằng cách nạp chồng toán tử. Người lập trình có thể sử dụng các hàm này để chuyển đổi giá trị của loại (đối tượng) do người dùng xác định thành giá trị của loại khác.  

Lập trình để quá tải các hàm hex() , oct() và float() .  

class circle: 
    def __init__(self, radius): 
        self.radius = radius 
    def __str__(self): 
        return "Radius of the circle is: " + str(self.radius) 
 
b1 = circle(10) 
print(b1)  
0

đầu ra.  

class circle: 
    def __init__(self, radius): 
        self.radius = radius 
    def __str__(self): 
        return "Radius of the circle is: " + str(self.radius) 
 
b1 = circle(10) 
print(b1)  
1

Phần kết luận.  

Bộ mã hóa cũng có thể chạy mà không làm quá tải toán tử. Với nạp chồng toán tử và hàm, thật dễ dàng để viết mã hiệu quả trong các kiểu dữ liệu cơ sở và tích hợp sẵn. Có lẽ bạn sẽ thấy khả năng thực sự của nạp chồng toán tử trong điện toán khoa học trong khi tính toán biểu diễn các đối tượng toán học một cách dễ dàng. Nếu không, nó sẽ làm cho việc tính toán trở nên phức tạp, tốn thời gian và yêu cầu.  

Quá tải trong Python với ví dụ là gì?

Ví dụ: toán tử + sẽ thực hiện phép cộng số học trên hai số, hợp nhất hai danh sách hoặc nối hai chuỗi. Tính năng này trong Python cho phép cùng một toán tử có ý nghĩa khác nhau tùy theo ngữ cảnh được gọi là nạp chồng toán tử.

Giải thích quá tải toán tử là gì?

Đa hình. Đa hình (hoặc nạp chồng toán tử) là cách thức mà các hệ thống OO cho phép sử dụng cùng một tên hoặc ký hiệu toán tử cho nhiều thao tác . Nghĩa là, nó cho phép ký hiệu hoặc tên toán tử được liên kết với nhiều hơn một triển khai của toán tử. Một ví dụ đơn giản về điều này là dấu “+”.

Quá tải và ghi đè toán tử 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.