Python的内置类型上是否有多余的特殊方法?

时间:2019-06-15 18:30:49

标签: python built-in magic-methods

流利的Python 中,他们说

  

您编写了len(my_object),如果my_object是用户定义类的实例,则Python会调用您实现的__len__实例方法...

     

但是对于liststrbytearray等内置类型,解释器采用了一种捷径:len()的CPython实现实际上返回了ob_size C结构中PyVarObject字段的值,它表示内存中任何可变大小的内置对象。

但是__len__仍然在至少其中一些定义中...

>>> 'string'.__len__()
6
>>> [1, 2, 3].__len__()
3

如果len未调用这些方法,这些服务有什么作用?还有其他类似的例子吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,CPython实现不会调用__len__()的事实并不意味着没有Python库或用户程序可以使用。即使CPython在可能的情况下使用快捷方式,保持该方法的可用性也与API的稳定性有关。