我有两个例子:
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之外使用它们。
答案 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__
。