Hướng dẫn python __add__ vs __iadd__ - trăn __add__ so với __iadd__

Cú pháp

object.__iadd__(self, other)

Phương pháp ma thuật Python __iadd__() thực hiện bổ sung tại chỗ x += y cộng với các toán hạng và gán kết quả cho toán hạng bên trái. Hoạt động này cũng được gọi là gán số học tăng cường. Phương thức chỉ cần trả về giá trị mới sẽ được gán cho toán hạng đầu tiên.augmented arithmetic assignment. The method simply returns the new value to be assigned to the first operand.

  • Khi bạn gọi x += y, Python trước tiên cố gắng gọi x.__iadd__(y).
  • Nếu điều này không được thực hiện, nó sẽ thử bổ sung bình thường ____10.
  • Nếu điều này không được triển khai, nó sẽ thử bổ sung ngược
    class Data:
        def __iadd__(self, other):
            return 'finxter 42'
    
    
    x = Data()
    y = Data()
    
    x += y
    
    print(x)
    # finxter 42
    
    1 với các toán hạng hoán đổi.

Kết quả sau đó được gán cho toán hạng X đầu tiên. Nếu không có hoạt động nào được thực hiện, Python sẽ tăng

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
2.

Chúng tôi gọi đây là một phương pháp Dunder của người Viking đối với phương pháp Double Double Undercore (còn được gọi là Phương pháp ma thuật của Hồi giáo). Để có được một danh sách tất cả các phương pháp Dunder với lời giải thích, hãy xem bài viết Dunder Cheat Sheet của chúng tôi trên blog này.Double Underscore Method” (also called “magic method”). To get a list of all dunder methods with explanation, check out our dunder cheat sheet article on this blog.

Ví dụ cơ bản ghi đè __iadd__

Trong ví dụ mã sau, bạn tạo một lớp

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
3 và xác định phương pháp ma thuật
class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
4.

  • Đối số của người Viking là đối số mặc định của từng phương thức và nó đề cập đến đối tượng mà nó được gọi là trên trường hợp của chúng tôi, toán hạng đầu tiên của hoạt động tại chỗ.
  • Đối số khác của người Viking về phương thức tại chỗ đề cập đến toán hạng thứ hai, tức là,
    class Data:
        def __iadd__(self, other):
            return 'finxter 42'
    
    
    x = Data()
    y = Data()
    
    x += y
    
    print(x)
    # finxter 42
    
    5 trong hoạt động tại chỗ x += y.

Giá trị trả về của thao tác trả về một chuỗi giả

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
7 để được gán cho toán hạng đầu tiên. Trong thực tế, đây sẽ là kết quả của việc bổ sung tại chỗ.

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42

Bổ sung tại chỗ mà không có __iadd __ ()

Để hỗ trợ bổ sung tại chỗ trên một lớp tùy chỉnh, bạn không thể ghi đè lên phương thức __iadd__() tại chỗ. Bởi vì nếu phương thức không được xác định, Python rơi trở lại phương thức

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
9 bình thường và gán kết quả của nó cho toán hạng đầu tiên.

Đây là một ví dụ:

class Data:
    def __add__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42

Bổ sung tại chỗ mà không có __iadd __ () và __add __ ()

Để hỗ trợ bổ sung tại chỗ x += y trên một lớp tùy chỉnh, bạn thậm chí không phải ghi đè lên bất kỳ phương thức x.__iadd__(y) hoặc

class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
0 nào. Nếu cả hai đều không được xác định, Python rơi trở lại phương thức
class Data:
    def __iadd__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
1 ngược và gán kết quả của nó cho toán hạng đầu tiên.

Dưới đây, một ví dụ trong đó bạn tạo một lớp tùy chỉnh cho toán hạng đầu tiên không hỗ trợ bất kỳ hoạt động bổ sung nào. Sau đó, bạn xác định một lớp tùy chỉnh cho toán hạng thứ hai xác định phương thức

class Data:
    def __add__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
4. Đối với hoạt động tại chỗ, Python rơi trở lại phương thức
class Data:
    def __add__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
4 được xác định trên toán hạng thứ hai và gán nó cho toán hạng đầu tiên
class Data:
    def __add__(self, other):
        return 'finxter 42'


x = Data()
y = Data()

x += y

print(x)
# finxter 42
6:

class Data_1:
    pass

class Data_2:
    def __radd__(self, other):
        return 'finxter 42'

x = Data_1()
y = Data_2()

x += y

print(x)
# finxter 42

TypeError: Loại toán hạng không được hỗ trợ cho += =

Nếu bạn cố gắng thực hiện bổ sung tại chỗ Để khắc phục lỗi này, chỉ cần xác định bất kỳ phương thức nào trước khi thực hiện thao tác tại chỗ.

class Data:
    pass


x = Data()
y = Data()

x += y

Output:

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 8, in 
    x += y
TypeError: unsupported operand type(s) for +=: 'Data' and 'Data'

Video liên quan

[Tổng quan] Các toán tử phân công tại chỗ của Python | Người vận hành hỗn hợp

References:

  • https://docs.python.org/3/reference/datamodel.html
  • Hoạt động tại chỗ Python

Đi đâu từ đây?

Đủ lý thuyết. Hãy để có được một số thực hành!

Các lập trình viên được trả tiền sáu con số và hơn thế nữa vì họ có thể giải quyết các vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa.

Để trở nên thành công hơn trong việc mã hóa, giải quyết nhiều vấn đề thực sự hơn cho người thực. Đó là cách bạn đánh bóng các kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, những gì mà việc sử dụng lý thuyết học tập mà không ai cần?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế!

Bạn có muốn ngừng học hỏi với các dự án đồ chơi và tập trung vào các dự án mã thực tế kiếm tiền cho bạn và giải quyết các vấn đề thực sự cho mọi người?

Nếu câu trả lời của bạn là có !, Hãy xem xét việc trở thành một nhà phát triển tự do Python! Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện các kỹ năng trăn của bạn, ngay cả khi bạn là người mới bắt đầu hoàn toàn.YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi Làm thế nào để xây dựng kỹ năng thu nhập cao của bạn Python và tìm hiểu cách tôi phát triển kinh doanh mã hóa của mình trực tuyến và làm thế nào bạn có thể, từ sự thoải mái của bạn riêng nhà.

Tham gia hội thảo trên web miễn phí ngay bây giờ!

Hướng dẫn python __add__ vs __iadd__ - trăn __add__ so với __iadd__

Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.

Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer (Nostarch 2020), đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.

Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.