【发布时间】:2016-01-06 22:33:41
【问题描述】:
我有两个例子:
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 之外使用它们。
【问题讨论】:
-
“魔术方法”的重点是让您自定义对象在使用普通语法时的行为方式。当然,您可以将每个
foo = bar + baz重写为foo =bar.__add__(baz),但您为什么要这样做?!另外,我认为这不会在没有实现该方法的情况下调用委托,+会这样做。