Dunder方法verus内置方法

时间:2015-10-09 05:20:40

标签: python oop

我有两个例子:

a = [1,2,3]
b = 4

print (a.__len__())
print (len(a))

print(b.__add__(4))
print (b + 4)

我想我的问题是,使用__len__魔术方法与内置len()方法有什么不同?我看到人们使用__len__的唯一一次是在尝试查找用户创建的类的对象的长度时。

与其他dunder方法相同,例如__str____add__我似乎从不在类或OOP之外使用它们。

1 个答案:

答案 0 :(得分:-2)

只有很小的差异。函数只是一个函数,调用 len 。像

这样的东西
def len(x):
   return x.__len__()

当然,你可以覆盖builtin len,但那是dump(可能除了调试)。唯一不同的是len(x)更容易阅读,而x.__len__允许您创建自己的运算符实现。 x.__len__也可以更快一点,但这是使用它的一个很好的理由。

当运算符有2个参数时,它的实现会做更多。 a+b首先尝试,是否可调用a.__add__,如果不是,则尝试调用b.__radd__