在Python中的方法前后的__符号的意思

Calling methods surrounded by __ in Python

我在读一本关于python的书,上面说当你调用help(obj)列出所有可以在obj上调用的方法时,两边被__包围的方法都是不能调用的私有helper方法。

但是,列出的字符串方法之一是__len__,您可以验证如果s是某个字符串,那么在python中输入s.__len__()将返回s的长度。

为什么可以调用这些方法中的一些,如__len__,但不能调用其他方法?


这本书不正确。您可以直接调用__dunder__特殊方法;它们的所有特殊之处在于它们在python中的文档化使用以及语言本身如何使用它们。

大多数代码不应该直接调用它们,而是让Python来调用它们。例如,使用len()函数,而不是对对象调用__len__方法。

语言保留所有这些名称供自己使用;请参阅参考文档中的保留标识符类:

System-defined names. These names are defined by the interpreter and its implementation (including the standard library). Current system names are discussed in the Special method names section and elsewhere. More will likely be defined in future versions of Python. Any use of __*__ names, in any context, that does not follow explicitly documented use, is subject to breakage without warning.