Python 类定义中 __add__() 和 add() 的区别

问题描述 投票:0回答:1

我正在用Python学习OOP,我遇到了想要添加两个对象的情况。我见过有人使用以下格式:

class GFG: 

    def __init__(self, val): 
        self.val = val 
          
    def __add__(self, val2): 
        return GFG(self.val + val2.val) 

obj1 = GFG("Geeks") 
obj2 = GFG("ForGeeks") 
obj3 = obj1 + obj2 
print(obj3.val)

但我想知道我们是否可以使用

def add()
代替
def __add__()
。如果是或否,请您详细解释一下为什么它有效或无效。

我尝试用

def __add__()
替换
def add()
但出现了如下错误:

Traceback (most recent call last):
File "Solution.py", line 11, in <module>
 obj3 = obj1 + obj2 
TypeError: unsupported operand type(s) for +: 'GFG' and 'GFG'
python operator-overloading
1个回答
0
投票

1。 __ 添加__( ) : 这是 Python 中的一种特殊方法,也称为“魔术方法”,其主要目的是定义加法运算符 (+) 在与类的对象一起使用时的行为方式。每当您在同一类的两个对象之间使用 + 时,它就会自动调用。该定义需要两个参数:self(指左操作数对象)和other(指右操作数对象)。该方法应该返回一个新对象,表示两个原始对象相加的结果。

2。添加(): 这是一个常规方法,与类中的任何其他方法一样定义。它在语言中没有特殊的作用,并且与加法运算没有内在联系。您可以将其用于各种目的,例如执行计算、更新数据或与其他对象交互。

主要差异以及出现错误的原因:
__ add__( ) 特定于对象添加,而 add( ) 可以用于任何目的。
__ add__( ) 由 + 运算符自动调用,而 add( ) 需要作为方法显式调用。

示例:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def add_age(self, years):
    self.age += years

person1 = Person("John", 30)
person1.add_age(5)
print(person1.age)  # 35
© www.soinside.com 2019 - 2024. All rights reserved.