在Python中,
add
和__add__
方法有什么区别?add
和__add__
方法有什么区别?add
的方法,就是一个名字为此的方法。它对于语言或解释器来说没有任何特殊意义。唯一可以说的是集合有一个同名的方法。仅此而已,没有什么特别的。__add__
被+
操作符在内部调用,所以它在语言规范和解释器中得到了特殊关注,并且您可以重写它来定义类对象的加法运算。您不会直接调用它(虽然您可以——它们仍然是普通方法,只是在某些情况下隐式调用并具有一些额外的限制——但很少有理由——更不用说一个好的理由了)。有关详细信息和其他“特殊”方法的完整列表,请参阅“特殊”方法的文档。operator.add(a, b)
operator.__add__(a, b)
请查看源代码:https://github.com/python/cpython/blob/3.10/Lib/operator.py :
def add(a, b):
"Same as a + b."
return a + b
...
# All of these "__func__ = func" assignments have to happen after importing
# from _operator to make sure they're set to the right function
...
__add__ = add
print(3+3) # call `operator.__add__` which is `operator.add`
import operator
print(operator.add(3, 3)) # call `operator.add` directory
补充之前的帖子,除非在核心Python功能上进行一些黑客攻击,例如修改/重载标准运算符等,否则通常不建议将__*__
用作自有类中标识符的名称。而且,通常这样的名称与神奇行为相关联,因此在自己的命名空间中避免使用它们可能是明智的选择,除非方法的神奇性质被暗示。
请参见this post以获取详细论述
__*__
方法并不那么神秘,这是相当简单的 - 没有必要让它听起来那么玄妙。 - jsbueno