Hướng dẫn what is __ add __ method in python? - __ add __ method trong python là gì?

Phương thức __ADD __ () trong Python chỉ định những gì xảy ra khi bạn gọi + trên hai đối tượng. Khi bạn gọi obj1 + obj2, về cơ bản bạn đang gọi obj1 .__ Thêm __ (obj2).__add__() method in Python specifies what happens when you call + on two objects. When you call obj1 + obj2, you are essentially calling obj1.__add__(obj2).

Ví dụ: hãy để cuộc gọi + trên hai đối tượng INT:int objects:

n1 = 10
n2 = 20

print(n1 + n2)
print(n1.__add__(n2))

Output:

30
30

Điều này hoạt động, bởi vì INT thực hiện phương thức __ADD __ () đằng sau hậu trường.int implements the __add__() method behind the scenes.

Để thực hiện bổ sung hỗ trợ đối tượng tùy chỉnh với toán tử +, bạn cần triển khai phương thức __ADD __ () trong lớp.__add__() method in the class.

Trong hướng dẫn này, bạn tìm hiểu cách thực hiện phương thức __add __ (). Bạn cũng học cách thêm các đối tượng của các loại hỗn hợp. Cuối cùng, bạn sẽ thấy cách thực hiện thêm các loại đối tượng hỗn hợp giao hoán (A + B = B + A).__add__() method. You also learn how to add objects of mixed types. Finally, you are going to see how to make adding mixed types of objects commutative (a + b = b + a).

Double Undercore Phương pháp trong Python

Trong trường hợp bạn chưa quen với các phương pháp Double Undercore, đây là một bản tóm tắt nhanh chóng.

Trong Python, các phương pháp kép xualus (còn được gọi là phương pháp Dunder) làm cho quá tải toán tử.

Một phương thức Dunder được thực hiện thành một lớp để xác định hành vi cho những gì xảy ra khi một hoạt động cụ thể được gọi trên một đối tượng.

Một ví dụ phổ biến về phương pháp Dunder là phương pháp __init__. Phương thức này được gọi tự động khi một đối tượng được tạo.__init__ method. This method is automatically called when an object is created.

Ví dụ:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"

Phương thức __ADD __ () trong Python là một phương thức đặc biệt xác định những gì xảy ra khi bạn thêm hai đối tượng với toán tử +. Khi bạn gọi O1 + O2, dưới mui xe, bạn đang gọi O1 .__ Thêm __ (O2).__add__() method in Python is a special method that defines what happens when you add two objects with the + operator. When you call o1 + o2, under the hood you are calling o1.__add__(o2).

Hãy cùng xem một ví dụ biểu thị bằng cách tạo trọng lượng lớp:Weight:

class Weight:
    def __init__(self, kilos):
        self.kilos = kilos

Bây giờ, hãy để tạo ra hai đối tượng trọng lượng và cố gắng thêm chúng lại với nhau:Weight objects and try to add them together:

w1 = Weight(50)
w2 = Weight(150)

tot = w1 + w2

Output:

TypeError: unsupported operand type(s) for +: 'Weight' and 'Weight'

Lỗi này cho biết các đối tượng trọng lượng không hỗ trợ bổ sung với toán tử +. Lý do tại sao điều này thất bại là bạn chưa chỉ định những gì sẽ xảy ra khi gọi + trên hai đối tượng trọng lượng.Weight objects do not support addition with + operator. The reason why this fails is that you have not specified what should happen when calling + on two Weight objects.

Để xác định những gì xảy ra khi thêm trọng số, bạn cần thực hiện phương thức __add __ () trong lớp cân.__add__() method in the Weight class.

Trong ví dụ này, việc thêm hai đối tượng trọng lượng sẽ tạo ra một đối tượng trọng lượng mới có số kg là tổng số kg của hai đối tượng trọng lượng.Weight objects should produce a new Weight object whose kilos is the sum of the kilos of the two Weight objects.

Đây là cách nó trông trong mã:

class Weight:
    def __init__(self, kilos):
        self.kilos = kilos
    
    def __add__(self, otherWeight):
        return Weight(self.kilos + otherWeight.kilos)
  • Phương pháp __ADD __ () lấy bản thân làm tham số để biết trọng lượng của chính nó. Khi gọi W1 + W2, tự đề cập đến W1.__add__() method takes self as a parameter to know its own weight. When calling w1 + w2, self refers to w1.
  • Phương pháp __ADD __ () cũng cần tham số cân nặng khác để có được trọng lượng của đối tượng trọng lượng thứ hai. Trọng lượng khác giống như W2 khi gọi W1 + W2.__add__() method also takes otherWeight parameter to get the weight of the second Weight object. The otherWeight is the same as w2 when calling w1 + w2.
Hướng dẫn what is __ add __ method in python? - __ add __ method trong python là gì?

Bây giờ bạn có thể thêm hai đối tượng trọng lượng với nhau bằng cách:Weight objects together by:

w1 = Weight(50)
w2 = Weight(150)

tot = w1 + w2

print(tot.kilos)

Output:

200

Lưu ý cách gọi W1 + W2 giống hệt như gọi W1 .__ Thêm __ (W2).w1 + w2 is the exact same as calling w1.__add__(w2).

Ví dụ:

w1 = Weight(50)
w2 = Weight(150)

tot = w1.__add__(w2)

print(tot.kilos)

Output:

200

Phương thức __ADD __ () trong Python là một phương thức đặc biệt xác định những gì xảy ra khi bạn thêm hai đối tượng với toán tử +. Khi bạn gọi O1 + O2, dưới mui xe, bạn đang gọi O1 .__ Thêm __ (O2).+ operator on multiple Weights:

30
30
1

Output:

30
30
2

Hãy cùng xem một ví dụ biểu thị bằng cách tạo trọng lượng lớp:

Bây giờ, hãy để tạo ra hai đối tượng trọng lượng và cố gắng thêm chúng lại với nhau:

Lỗi này cho biết các đối tượng trọng lượng không hỗ trợ bổ sung với toán tử +. Lý do tại sao điều này thất bại là bạn chưa chỉ định những gì sẽ xảy ra khi gọi + trên hai đối tượng trọng lượng.w1 + w2. The result of this is an integer object to which w3 is added. So behind the scenes w1 + w2 + w3 looks like this:

30
30
3

Để xác định những gì xảy ra khi thêm trọng số, bạn cần thực hiện phương thức __add __ () trong lớp cân.

Trong ví dụ này, việc thêm hai đối tượng trọng lượng sẽ tạo ra một đối tượng trọng lượng mới có số kg là tổng số kg của hai đối tượng trọng lượng.

Đây là cách nó trông trong mã:Weight objects together.

Phương pháp __ADD __ () lấy bản thân làm tham số để biết trọng lượng của chính nó. Khi gọi W1 + W2, tự đề cập đến W1.

Phương pháp __ADD __ () cũng cần tham số cân nặng khác để có được trọng lượng của đối tượng trọng lượng thứ hai. Trọng lượng khác giống như W2 khi gọi W1 + W2.__add__() method so that it checks the type of the other object.

  • Bây giờ bạn có thể thêm hai đối tượng trọng lượng với nhau bằng cách:int, then create a new Weight object from the original weight’s kilos by adding the integer value to it.
  • Lưu ý cách gọi W1 + W2 giống hệt như gọi W1 .__ Thêm __ (W2).Weight, add the kilos of both objects together and create a new Weight out of that.

Đây là cách nó trông trong mã:

30
30
4

Phương pháp __ADD __ () lấy bản thân làm tham số để biết trọng lượng của chính nó. Khi gọi W1 + W2, tự đề cập đến W1.Weight objects and ints:

30
30
5

Output:

30
30
6

Phương pháp __ADD __ () cũng cần tham số cân nặng khác để có được trọng lượng của đối tượng trọng lượng thứ hai. Trọng lượng khác giống như W2 khi gọi W1 + W2.a+b is b+a. Let’s see what happens when we try to reverse the order of addition:

30
30
7

Output:

30
30
8

Bây giờ bạn có thể thêm hai đối tượng trọng lượng với nhau bằng cách:(200).__add__(w1). In other words, you assume that int also supports adding Weight objects to it, which is obviously not true.

Lưu ý cách gọi W1 + W2 giống hệt như gọi W1 .__ Thêm __ (W2).__radd__() method helps.

Nhân tiện, bây giờ bạn cũng có thể gọi toán tử + trên nhiều trọng số:

Nhưng tại sao nó hoạt động?__add__() method does, it is good to know what the __radd__() does, as it closely relates to the __add__() method.

Điều này sôi sục xuống để điều hành nhà điều hành. Khi bạn đang tổng kết ba số nguyên, Python lần đầu tiên tổng hợp hai và sau đó thêm phần thứ ba vào số tiền đó.__radd__() method means reverse add.

Nói cách khác, trình thông dịch Python lần đầu tiên tổng hợp W1 + W2. Kết quả của điều này là một đối tượng số nguyên mà W3 được thêm vào. Vì vậy, đằng sau hậu trường W1 + W2 + W3 trông như thế này:a + b to b + a. This means a.__add__(b) turns into b.__radd__(a).

Hãy thử nó trên biên tập viên của bạn. Ngoài ra, hãy thoải mái mở rộng chuỗi để hiểu cách thức hoạt động của nó.

Thêm các loại đối tượng khác nhau với nhauWeight class from the previous chapter.

Cho đến nay, bạn đã thấy cách thêm các đối tượng trọng lượng lại với nhau.

30
30
9

Nhưng hãy để nói rằng bạn cũng muốn thêm INT và trọng lượng.

30
30
8

Hỗ trợ điều này là dễ dàng. Sửa đổi phương thức __add __ () để nó kiểm tra loại đối tượng khác.int and Weight together. This is not surprising, as the built-in int type does not know anything about Weight.

Hướng dẫn what is __ add __ method in python? - __ add __ method trong python là gì?

Như bạn đã biết, gọi 150 + W1 tương đương với (150) .__ Thêm __ (W1). Vì vậy, dưới mui xe, gọi (150) .__ Thêm __ (W1) gây ra vấn đề.150 + w1 is equivalent to (150).__add__(w1). So under the hood, calling (150).__add__(w1) causes the problem.

Để khắc phục sự cố, đó không phải là một tùy chọn để tạo hỗ trợ INT thêm các đối tượng trọng lượng. Nhưng những gì bạn có thể làm thay vào đó, là làm cho hỗ trợ đối tượng trọng lượng thêm ints.int support adding Weight objects. But what you can do instead, is to make the Weight object support adding ints.

Nói cách khác, bạn muốn trao đổi các cuộc gọi như thế này:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
1

Với cái này:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
2

Đây là những gì phương thức __radd __ () làm. Nó đảo ngược thứ tự bổ sung. Nói cách khác, a .__ Thêm __ (b) trở thành b .__ radd __ (a).__radd__() method does. It reverses the addition order. In other words, a.__add__(b) becomes b.__radd__(a).

Vì vậy, hãy để thực hiện phương thức __radd __ () vào hạng cân. Điều này sẽ trả về một đối tượng trọng lượng trong đó một số nguyên được thêm vào kilos:__radd__() method into the Weight class. This should return a Weight object where an integer is added to the kilos:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
3

Bây giờ mã sai trước đó chạy thành công:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
4

Output:

200

Bây giờ bạn đã biết phương thức __radd __ () hoạt động như thế nào và khi nào nó có thể hữu ích.__radd__() method works and when it can be useful.

Chính xác, bạn cũng có thể sử dụng phương thức __add __ () trong phương thức __radd __ () vì nó biết cách xử lý các đầu vào số nguyên. Điều này đơn giản hóa mã một chút: __add__() method in the __radd__() method as it knows how to handle integer inputs. This simplifies the code a bit:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
6

Dù sao, hỗ trợ __radd __ () làm cho mã nhất quán. Bây giờ cả A + B và B + A như mong đợi.__radd__() makes the code consistent. Now both a + b and b + a work as expected.

Nhân tiện, bây giờ, lớp trọng lượng hỗ trợ __radd __ () cũng có thể gọi sum () trên danh sách các đối tượng trọng lượng.Weight class supports __radd__() it is also possible to call the sum() on a list of Weight objects.

Ví dụ:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
7

Output:

class Fruit:
    def __init__(self, name):
        self.name = name

# This calls __init__ with "Apple" argument:
apple = Fruit("Apple")

print(banana.name) # prints "Apple"
8

Không có __radd __ () điều này sẽ không thể thực hiện được. Điều này là do hàm tổng tích hợp () bắt đầu tổng kết từ 0. Điều này có nghĩa là thao tác đầu tiên sẽ là (0). ).__radd__() this would not be possible. This is because the built-in sum() function starts summing from 0. This means the first operation would be (0).__add__(w1), which would not work without the reverse add implementation that turns it into w1.__radd__(0).

Sự kết luận

Hôm nay bạn đã học được phương thức __ADD __ () là gì trong Python và cách sử dụng nó.__add__() method is in Python and how to use it.

Để tóm tắt lại, bất cứ khi nào bạn gọi OBJ1 + OBJ2 trong Python, bạn thực sự gọi obj1 .__ Thêm __ (obj2) đằng sau hậu trường.obj1 + obj2 in Python, you are truly calling obj1.__add__(obj2) behind the scenes.

Nói cách khác, để thêm hai đối tượng với nhau trong Python, lớp thực hiện các đối tượng cần thực hiện phương thức __ADD __ ().__add__() method.

Một phương pháp liên quan khác là phương thức __radd __ (). Điều này lật A+B với B+A. Khi a .__ thêm __ (b) không thành công, cuộc gọi sẽ trở thành b .__ radd __ (a). Điều này rất hữu ích khi A không hỗ trợ thêm B, nhưng B có thể được hỗ trợ thêm a.__radd__() method. This flips a+b with b+a. When a.__add__(b) fails, the call becomes b.__radd__(a). This is useful when the a does not support adding b, but b can be made support adding a.

Cảm ơn vì đã đọc.

Mã hóa hạnh phúc!

Đọc thêm

50 câu hỏi phỏng vấn Python

Danh sách __ Thêm __ làm gì?

__iadd__ đột biến danh sách, trong khi __add__ trả về một danh sách mới, như đã trình bày.returns a new list, as demonstrated.

Các phương thức __ được gọi là trong Python là gì?

Python - Phương pháp ma thuật hoặc dunder.Phương pháp ma thuật trong Python là các phương pháp đặc biệt bắt đầu và kết thúc với các dấu gạch dưới kép.Chúng cũng được gọi là phương pháp dunder.Magic or Dunder Methods. Magic methods in Python are the special methods that start and end with the double underscores. They are also called dunder methods.

__ chức năng __ trong Python là gì?

Trình thông dịch Python sửa đổi tên biến với ___.Vì vậy, nhiều lần nó sử dụng như một thành viên riêng vì một lớp khác không thể truy cập trực tiếp biến đó.Mục đích chính của __ là chỉ sử dụng biến /phương thức trong lớp nếu bạn muốn sử dụng nó bên ngoài lớp, bạn có thể công khai.Python3.to use variable /method in class only If you want to use it outside of the class you can make it public. Python3.

Phương pháp __ new__ làm gì?

__New __ () là một phương pháp tĩnh của lớp đối tượng.Khi bạn tạo một đối tượng mới bằng cách gọi lớp, Python gọi phương thức __new __ () để tạo đối tượng trước và sau đó gọi phương thức __init __ () để khởi tạo các thuộc tính của đối tượng.create the object first and then calls the __init__() method to initialize the object's attributes.