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ử
Các hàm đặc biệt của Python
Các hàm lớp bắt đầu bằng dấu gạch dưới kép __
được gọi là các hàm đặc biệt trong Python
Các chức năng đặc biệt được xác định bởi trình thông dịch Python và được sử dụng để triển khai các tính năng hoặc hành vi nhất định
Chúng được gọi là các hàm "gạch dưới kép" vì chúng có tiền tố và hậu tố gạch dưới kép, chẳng hạn như __init__[]
hoặc __add__[]
Dưới đây là một số chức năng đặc biệt có sẵn trong Python,
Mô tả chức năng__init__[]
khởi tạo các thuộc tính của đối tượng__str__[]
trả về một chuỗi đại diện của đối tượng__len__[]
trả về độ dài của đối tượng__add__[]
thêm hai đối tượng
class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
1gọi các đối tượng của lớp như một hàm bình thườngThí dụ. + Nạp chồng toán tử trong Python
Để quá tải toán tử +
, chúng ta sẽ cần triển khai hàm __add__[]
trong lớp
Với sức mạnh lớn đến trách nhiệm lớn. Chúng tôi có thể làm bất cứ điều gì chúng tôi thích bên trong chức năng này. Nhưng sẽ hợp lý hơn nếu trả về đối tượng
class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
4 của tổng tọa độHãy xem một ví dụ,
class Point:
def __init__[self, x=0, y=0]:
self.x = x
self.y = y
def __str__[self]:
return "[{0},{1}]".format[self.x, self.y]
def __add__[self, other]:
x = self.x + other.x
y = self.y + other.y
return Point[x, y]
p1 = Point[1, 2]
p2 = Point[2, 3]
print[p1+p2]
# Output: [3,5]
Trong ví dụ trên, điều thực sự xảy ra là, khi chúng ta sử dụng
class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
5, Python gọi class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
6, lần lượt là class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
7. Sau này, hoạt động bổ sung được thực hiện theo cách chúng tôi đã chỉ địnhTương tự, chúng ta cũng có thể quá tải các toán tử khác. Chức năng đặc biệt mà chúng ta cần thực hiện được lập bảng dưới đây
OperatorExpressionInternallyAddition
class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
5class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
6SubtractionTrue False0
True False1Multiplication
True False2
True False3Power
True False4
True False5Division
True False6
True False7Floor Division
True False8
True False9Remainder [modulo]
+
0+
1Bitwise Left Shift+
2+
3Bitwise Right Shift+
4+
5Bitwise AND+
6+
7Bitwise OR+
8+
9Bitwise XOR__
0__
1Bitwise NOT__
2__
3Nạp chồng toán tử so sánh
Python không chỉ giới hạn nạp chồng toán tử cho các toán tử số học. Chúng ta cũng có thể quá tải các toán tử so sánh
Đây là một ví dụ về cách chúng ta có thể quá tải toán tử __
4 để so sánh hai đối tượng lớp Person dựa trên __
5 của chúng
class Person:
def __init__[self, name, age]:
self.name = name
self.age = age
# overload < operator
def __lt__[self, other]:
return self.age < other.age
p1 = Person["Alice", 20]
p2 = Person["Bob", 30]
print[p1 < p2] # prints True
print[p2 < p1] # prints False
đầu ra
________số 8_______Ở đây, __
6 quá tải toán tử __
4 để so sánh thuộc tính tuổi của hai đối tượng
Phương thức __
6 trả về,
__
9 - nếu tuổi của đối tượng thứ nhất nhỏ hơn tuổi của đối tượng thứ hai__init__[]
0 - nếu tuổi của đối tượng thứ nhất lớn hơn tuổi của đối tượng thứ hai
Tương tự như vậy, các chức năng đặc biệt mà chúng ta cần thực hiện, để quá tải các toán tử so sánh khác được lập bảng dưới đây
OperatorExpressionInternallyLess than__init__[]
1__init__[]
2Less than or equal to__init__[]
3__init__[]
4Equal to__init__[]
5__init__[]
6Not equal to__init__[]
7__init__[]
8Greater than__init__[]
9__add__[]
0Greater than or equal to__add__[]
1__add__[]
2