Chương trình Python cộng hai số phức sử dụng nạp chồng toán tử

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 thông thường

Thí 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 sẽ 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ỉ định

Tươ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
5
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
6Subtraction
True
False
0
True
False
1Multiplication
True
False
2
True
False
3Power
True
False
4
True
False
5Division
True
False
6
True
False
7Floor Division
True
False
8
True
False
9Remainder [modulo]+0+1Bitwise Left Shift+2+3Bitwise Right Shift+4+5Bitwise AND+6+7Bitwise OR+8+9Bitwise XOR__0__1Bitwise NOT__2__3

Nạ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ự, 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

Chủ Đề