Các toán tử được sử dụng trong Python để thực hiện các thao tác cụ thể trên các toán hạng đã cho. Hoạt động mà bất kỳ toán tử cụ thể nào sẽ thực hiện trên bất kỳ loại dữ liệu được xác định trước nào đã được xác định trong Python
Mỗi toán tử có thể được sử dụng theo một cách khác nhau cho các loại toán hạng khác nhau. Ví dụ: toán tử +
được sử dụng để cộng hai số nguyên để cho kết quả là một số nguyên nhưng khi chúng ta sử dụng nó với toán hạng float thì kết quả là một giá trị float và khi +
được sử dụng với toán hạng chuỗi thì nó sẽ nối hai toán hạng được cung cấp
Hành vi khác nhau này của một toán tử đối với các loại toán hạng khác nhau được gọi là Nạp chồng toán tử. Việc sử dụng toán tử +
với các loại toán hạng khác nhau được hiển thị bên dưới
>>> x=10
>>> y=20
>>> x+y
30
>>> z=10.4
>>> x+z
20.4
>>> s1 = 'hello '
>>> s2 = 'world'
>>> s1+s2
'hello world'
Nhà điều hành +
có thể thêm gì không?
Câu trả lời là Không, nó không thể. Bạn có thể sử dụng toán tử +
để thêm hai đối tượng của một lớp không. Toán tử +
có thể thêm hai giá trị số nguyên, hai giá trị float hoặc chỉ có thể được sử dụng để nối hai chuỗi vì các hành vi này đã được xác định trong python
Vì vậy, nếu bạn muốn sử dụng cùng một toán tử để thêm hai đối tượng của một số lớp do người dùng xác định thì bạn sẽ phải tự xác định hành vi đó và thông báo cho python về điều đó
Nếu bạn vẫn chưa rõ, hãy tạo một lớp và thử sử dụng toán tử +
để thêm hai đối tượng của lớp đó,
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
Traceback [cuộc gọi gần đây nhất cuối cùng]. Tệp "/tmp/sessions/1dfbe78bb701d99d/main. py", dòng 7, inprint["sum = ", c1+c2] TypeError. [các] loại toán hạng không được hỗ trợ cho +. 'Phức hợp' và 'Phức hợp'
Vì vậy, chúng ta có thể thấy rằng toán tử +
không được hỗ trợ trong lớp do người dùng định nghĩa. Nhưng chúng ta có thể làm điều tương tự bằng cách nạp chồng toán tử +
cho lớp của chúng ta
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
2. Nhưng làm thế nào chúng ta có thể làm điều đó?Các hàm đặc biệt trong Python
Các hàm đặc biệt trong python là các hàm dùng để thực hiện các tác vụ đặc biệt. Các hàm đặc biệt này có tiền tố và hậu tố tên là
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
3 như chúng ta thấy trong phương thức class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
4 cũng là một hàm đặc biệt. Một số chức năng đặc biệt được sử dụng để nạp chồng toán tử được hiển thị bên dướitoán tử toán học
Dưới đây chúng tôi có tên của các chức năng đặc biệt để quá tải các toán tử toán học trong python
+
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
6Subtractionclass Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
7class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
8Divisionclass Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
9class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
0Floor Divisionclass Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
1class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
2Modulus[or Remainder]class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
3class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
4Powerclass Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
5class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
6Toán tử chuyển nhượng
Dưới đây chúng ta có tên của các hàm đặc biệt để quá tải toán tử gán trong python
NameSymbolSpecial FunctionIncrementclass Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
7class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
8Decrementclass Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
9+
0Product+
1+
2Division+
3+
4Modulus+
5+
6Power+
7+
8Toán tử quan hệ
Dưới đây chúng tôi có tên của các chức năng đặc biệt để quá tải các toán tử quan hệ trong python
NameSymbolSpecial FunctionLess than+
9+
0Greater than+
1+
2Equal to+
3+
4Not equal+
5+
6Less than or equal to+
7+
8Greater than or equal to+
9+
2Đã đến lúc xem một số ví dụ mã trong đó chúng ta thực sự sử dụng các hàm đặc biệt được chỉ định ở trên và quá tải một số toán tử
Quá tải toán tử +
Trong ví dụ mã dưới đây, chúng tôi sẽ quá tải toán tử +
cho lớp của chúng tôi
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
2,class Complex:
# defining init method for class
def __init__[self, r, i]:
self.real = r
self.img = i
# overloading the add operator using special function
def __add__[self, sec]:
r = self.real + sec.real
i = self.img + sec.img
return complx[r,i]
# string function to print object of Complex class
def __str__[self]:
return str[self.real]+' + '+str[self.img]+'i'
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ",c1+c2]
tổng = 7 + 7i
Trong chương trình trên, +
4 được sử dụng để quá tải toán tử +
i. e. khi toán tử +
được sử dụng với hai đối tượng lớp
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
2 thì hàm +
4 được gọi+
9 là một chức năng đặc biệt khác được sử dụng để cung cấp định dạng của đối tượng phù hợp để in
Quá tải toán tử +
9
Bây giờ, hãy nạp chồng toán tử nhỏ hơn để chúng ta có thể dễ dàng so sánh hai giá trị của đối tượng lớp
class Complex:
def __init__[self, r, i]:
self.real = r
self.img = i
c1 = Complex[5,3]
c2 = Complex[2,4]
print["sum = ", c1+c2]
2 bằng cách sử dụng toán hạng nhỏ hơn +
9Như chúng ta đã biết, để làm như vậy, chúng ta phải định nghĩa hàm đặc biệt +
3 trong lớp của chúng ta
Dựa trên yêu cầu so sánh đối tượng lớp, bạn có thể xác định logic cho các chức năng đặc biệt để ghi đè toán tử. Trong đoạn mã trên, chúng tôi đã ưu tiên cho phần thực của số phức, nếu phần đó nhỏ hơn thì toàn bộ số phức nhỏ hơn, nếu bằng nhau thì chúng tôi kiểm tra phần ảo