【问题标题】:Dunder Methods verus builtin methods [duplicate]Dunder方法与内置方法[重复]
【发布时间】: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),但您为什么要这样做?!另外,我认为这不会在没有实现该方法的情况下调用委托,+ 会这样做。

标签: python oop


【解决方案1】:

只有很小的差异。函数只是一个函数,调用 len。类似的东西

def len(x):
   return x.__len__()

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

当操作符有 2 个参数时,它的实现做得更多。 a+b 一开始它会尝试,是否可以调用a.__add__,如果不是,则尝试调用b.__radd__

猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2017-11-10
  • 2020-12-11
  • 2022-12-11
  • 2022-06-10
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多