Python中方法的区别

时间:2014-03-05 18:01:51

标签: python exception

我是python编程的新手,现在我已经在Python书中找到了关于OOP的部分。我对python类中的方法定义感到困惑。

有什么区别:

def __add__(self):
  pass

def add(self):
  pass

如果你能为我澄清一下,我将感激不尽;谢谢你们。

3 个答案:

答案 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 - ba.__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”方法。