在Python中调用__包围的方法

时间:2015-01-22 09:06:44

标签: python methods

我正在读一本关于Python的书,它说当你打电话给help(obj)列出所有可以在obj上调用的方法时,那些方法是两边都被__包围的私有助手方法是无法调用的。

但是,列出的字符串方法之一是__len__,您可以验证如果s是某个字符串,则在Python中输入s.__len__()会返回{{1}的长度}。

为什么可以调用其中一些方法,例如s,但其他方法无法调用?

1 个答案:

答案 0 :(得分:9)

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

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

该语言保留所有这些名称供自己使用;请参阅参考文档中的Reserved classes of identifiers

  

系统定义的名称。这些名称由解释器及其实现(包括标准库)定义。当前系统名称在Special method names部分和其他地方进行了讨论。更多可能会在未来的Python版本中定义。 任何使用__*__名称,在任何情况下,如果没有明确记录使用,都会在没有任何警告的情况下破损。