【发布时间】:2020-08-16 09:57:00
【问题描述】:
据我了解,可以通过两种方式之一调用对象的魔法方法。首先像这样,魔术方法像任何常规方法一样被调用:
x = (1, 2, 3, 4)
print(x.__len__())
#prints 4
其次,像这样,魔术方法被称为“特殊”:
x = (1, 2, 3, 4)
print((len(x)))
#prints 4
正如我们所见,两者是等价的。但是,当我使用第一种方式在一个元组上调用魔术方法 reversed() 时,我遇到了一个错误:
x = (1, 2, 3, 4)
x.__reversed__()
#causes an attribute error
然而,调用反转方法的“特殊”方式工作得非常好:
x = (1, 2, 3, 4)
reversed(x)
#returns a reversed object
为什么会发生这种情况?我对 dunder 方法有误解吗?
【问题讨论】:
-
约定说您不应将任何以下划线开头的方法视为对象的公共 API 的一部分。为什么?您问题中的观察就是一个很好的例子。
标签: python python-3.x tuples