Hướng dẫn how do you add two objects in python? - làm thế nào để bạn thêm hai đối tượng trong python?

Bạn có thể sử dụng

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
7 với
>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
8 và giải nén có thể lặp lại (sử dụng
>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
9) trong
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
0. Ví dụ:

import operator

class Add_obj:
    def __init__(self, *num):
        self.num = num

    def __repr__(self):
        return 'Add_obj{}'.format(self.num)

    def __add__(self, other):
        return self.__class__(*map(operator.add, self.num, other.num))

Và nó thực sự trả về "đối tượng dự kiến":

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)

Tuy nhiên

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
7 không thực sự yêu cầu, đây chỉ là một cách rất hiệu quả và ngắn để thực hiện điều này. Thay vào đó, bạn cũng có thể sử dụng sự hiểu biết và
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
2:

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])

Như đã chỉ ra trong các bình luận, điều này cũng sẽ hoạt động, nhưng có thể cho kết quả bất ngờ (hoặc thậm chí sai) khi hai

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
3 có độ dài khác nhau. Nếu bạn muốn cấm thêm hai đối tượng có kích thước khác nhau, bạn có thể nêu ra một ngoại lệ thay thế:

def __add__(self, other):
    if len(self.num) != len(other.num):
        raise ValueError('cannot two Add_obj with different lengths')
    ...  # use one of the both approaches from above

Ví dụ:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7, 2)
>>> obj1 + obj2
ValueError: cannot two Add_obj with different lengths

Hoặc bạn có thể không có cái nào ngắn hơn:

from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])

Ví dụ:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7, 2)
>>> obj1 + obj2
Add_obj(6, 12, 2)

Cú pháp

object.__add__(self, other)

Phương thức Python từ

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
4 trả về một đối tượng mới đại diện cho tổng của hai đối tượng. Nó thực hiện toán tử bổ sung
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
5 trong Python.

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.

Thí dụ

Trong ví dụ sau, bạn tạo một lớp tùy chỉnh

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
6 và ghi đè lên phương thức
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
7 để tạo một đối tượng
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
6 mới với giá trị là tổng của các giá trị của hai toán hạng
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
9 và
def __add__(self, other):
    if len(self.num) != len(other.num):
        raise ValueError('cannot two Add_obj with different lengths')
    ...  # use one of the both approaches from above
0 của loại
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
6.

class Data:

    def __init__(self, value):
        self.value = value
        
    def __add__(self, other):
        return Data(self.value + other.value)


a = Data(40)
b = Data(2)
c = a + b

print(c.value)
# 42

Bạn đã xác định phương thức Dunder để tổng kết quả của hai đối tượng

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
6 là chính đối tượng
def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
6:

print(type(c))
# 

Nếu bạn đã định nghĩa phương pháp

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
7, Python sẽ tăng lên một
def __add__(self, other):
    if len(self.num) != len(other.num):
        raise ValueError('cannot two Add_obj with different lengths')
    ...  # use one of the both approaches from above
5.

Cách giải quyết KiểuError: Loại toán hạng không được hỗ trợ cho + cho +

Hãy xem xét đoạn mã sau khi bạn cố gắng thêm hai đối tượng tùy chỉnh mà không cần xác định phương thức Dunder

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
7:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
0

Chạy điều này dẫn đến thông báo lỗi sau trên máy tính của tôi:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
1

Lý do cho lỗi này là phương thức

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
7 Dunder chưa bao giờ được xác định và nó không được xác định cho một đối tượng tùy chỉnh theo mặc định. Vì vậy, để giải quyết
def __add__(self, other):
    if len(self.num) != len(other.num):
        raise ValueError('cannot two Add_obj with different lengths')
    ...  # use one of the both approaches from above
8, bạn cần cung cấp phương thức
def __add__(self, other):
    if len(self.num) != len(other.num):
        raise ValueError('cannot two Add_obj with different lengths')
    ...  # use one of the both approaches from above
9 trong định nghĩa lớp của bạn như được hiển thị trước đây:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
2

Video liên quan

Nhà điều hành bổ sung Python - Deep Dive

Ví dụ nâng cao về việc thêm danh sách trong một lớp tùy chỉnh

Để sử dụng toán tử bổ sung trên các đối tượng tùy chỉnh, bạn cần xác định phương thức

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
7 Dunder có hai đối số:
>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7, 2)
>>> obj1 + obj2
ValueError: cannot two Add_obj with different lengths
1 và
>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7, 2)
>>> obj1 + obj2
ValueError: cannot two Add_obj with different lengths
2 và trả về kết quả của
>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7, 2)
>>> obj1 + obj2
ValueError: cannot two Add_obj with different lengths
3. Để có được kết quả cho một đối tượng tùy chỉnh, bạn có thể sử dụng các thuộc tính (dữ liệu) được duy trì trong đối tượng này.

Trong mã sau, bạn thêm hai giỏ với nhau bằng cách kết hợp nội dung của chúng:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
3

Đầu ra của đoạn mã này là giỏ kết hợp:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
4

Mã này bao gồm các bước sau:

  • Tạo lớp
    >>> obj1 = Add_obj(2, 5)
    >>> obj2 = Add_obj(4, 7, 2)
    >>> obj1 + obj2
    ValueError: cannot two Add_obj with different lengths
    
    4 giữ nội dung danh sách để lưu trữ một số hàng hóa.
  • Xác định Phương pháp ma thuật
    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
    
    0 tạo ra một giỏ mới bằng cách kết hợp danh sách hàng hóa (
    >>> obj1 = Add_obj(2, 5)
    >>> obj2 = Add_obj(4, 7, 2)
    >>> obj1 + obj2
    ValueError: cannot two Add_obj with different lengths
    
    6) từ hai giỏ toán hạng. Lưu ý rằng chúng tôi dựa vào toán tử bổ sung đã được triển khai trên các danh sách, tức là, danh sách kết hợp, để thực sự triển khai toán tử bổ sung cho các giỏ.
  • Chúng tôi tạo hai giỏ
    >>> obj1 = Add_obj(2, 5)
    >>> obj2 = Add_obj(4, 7, 2)
    >>> obj1 + obj2
    ValueError: cannot two Add_obj with different lengths
    
    7 và
    >>> obj1 = Add_obj(2, 5)
    >>> obj2 = Add_obj(4, 7, 2)
    >>> obj1 + obj2
    ValueError: cannot two Add_obj with different lengths
    
    8 và thêm chúng lại với nhau vào một giỏ mới
    >>> obj1 = Add_obj(2, 5)
    >>> obj2 = Add_obj(4, 7, 2)
    >>> obj1 + obj2
    ValueError: cannot two Add_obj with different lengths
    
    9 bằng cách sử dụng thao tác bổ sung được xác định.

Python __add__ vs __iadd__

Python cung cấp cho toán tử

from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
0 để thêm hai đối tượng tại chỗ bằng cách tính tổng
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
1 và gán kết quả cho tên biến toán hạng đầu tiên
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
2. Bạn có thể thiết lập hành vi bổ sung tại chỗ cho lớp của riêng bạn bằng cách ghi đè phương pháp Magic Dund Dunder
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
3 trong định nghĩa lớp của bạn.

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
5

Biểu thức

from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
0 là đường cú pháp cho dạng dài hơn
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
5:

>>> obj1 = Add_obj(2, 5)
>>> obj2 = Add_obj(4, 7)
>>> obj1 + obj2
Add_obj(6, 12)
6

Vì vậy, ở đây, sự khác biệt giữa Python

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
0 và Python
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
7:

Nếu bạn ghi đè lên phương pháp ma thuật

def __add__(self, other):
    return self.__class__(*[num1+num2 for num1, num2 in zip(self.num, other.num)])
0, bạn sẽ xác định ngữ nghĩa của bổ sung Python đơn giản
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
1. Và nếu bạn ghi đè lên phương pháp ma thuật
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
7, bạn sẽ xác định ngữ nghĩa của bổ sung Python tại chỗ
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
0 Thay đổi đối tượng gốc
from itertools import izip_longest as zip_longest  # only zip_longest on Python 3

class Add_obj:

    ...

    def __add__(self, other):
        return self.__class__(*[num1+num2 for num1, num2 in zip_longest(self.num, other.num, fillvalue=0)])
2.

Lập trình viên hài hước

Câu hỏi: Tại sao các lập trình viên luôn kết hợp Halloween và Giáng sinh? ❗ Trả lời: Bởi vì ngày 31 tháng 10 bằng ngày 25 tháng 12.Question: Why do programmers always mix up Halloween and Christmas?
Answer: Because Oct 31 equals Dec 25.

.

Đ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 how do you add two objects in python? - làm thế nào để bạn thêm hai đối tượng trong python?

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.

Chúng ta có thể thêm hai đối tượng trong Python không?

Chức năng Python __add __ () là một trong những phương thức ma thuật trong Python trả về một đối tượng mới (thứ ba), tức là việc bổ sung hai đối tượng khác.Nó thực hiện toán tử bổ sung++trong Python.. It implements the addition operator “+” in Python.

Làm thế nào để __ thêm __ làm việc python?

Phương thức ma thuật __add__ được sử dụng để thêm các thuộc tính của thể hiện lớp.Ví dụ: giả sử Object1 là một thể hiện của lớp A và Object2 là một thể hiện của lớp B và cả hai lớp này đều có một thuộc tính gọi là 'A', giữ một số nguyên.used to add the attributes of the class instance. For example, let's say object1 is an instance of a class A and object2 is an instance of class B and both of these classes have an attribute called 'a', that holds an integer.

__ str __ trong Python là gì?

Python __str __ () Phương thức này trả về biểu diễn chuỗi của đối tượng.Phương thức này được gọi là hàm in () hoặc str () được gọi trên một đối tượng.This method returns the string representation of the object. This method is called when print() or str() function is invoked on an object.