我是python编程的新手,现在我已经在Python书中找到了关于OOP的部分。我对python类中的方法定义感到困惑。
有什么区别:
def __add__(self):
pass
和
def add(self):
pass
如果你能为我澄清一下,我将感激不尽;谢谢你们。
答案 0 :(得分:1)
以__add__(...)
等下划线开头和结尾的方法可用于覆盖现有功能,而没有下划线的add(...)
方法是一种新的用户定义方法。不同之处在于:
使用__add__(self)
,您可以致电
thisObj + otherObj
使用add(self)
,您可以致电
thisObj.add(otherObj)
因此,__add__
,__sub__
,__call__
等会覆盖现有的运营商或功能。
答案 1 :(得分:1)
从根本上说,没有区别。一种是名为__add__
的方法,另一种是名为add
的方法。
然而,这是Python解释器和各种库用于指定某种方式“特殊”的方法的约定。它们被称为魔术方法。例如,a + b
基本上是a.__add__(b)
的语法糖。真:
>>> (1).__add__(2)
3
这意味着如果您创建了一个您希望其添加有意义的类,而不是调用您的方法,比如addTo
,然后执行foo.addTo(bar)
,则可以调用方法{{1}而改为__add__
。
其他魔术方法:foo + bar
相当于a - b
,a.__sub__(b)
相当于len(a)
,a.__len__()
相当于cmp(a, b)
。 a.__cmp__(b)
导致调用新对象的a = MyClass()
方法。 And many more
答案 2 :(得分:0)
Python中带有双下划线的方法在名称之前和之后被称为magic method,用于定义对象的某些行为。
例如,当您的对象用作添加的一部分时,将隐式调用my_object.__add__()
方法
>>> my_object + another_object
这是Python的魔术方法的good resource,也就是“dunder”方法。