在流利的Python 中,他们说
您编写了
len(my_object)
,如果my_object
是用户定义类的实例,则Python会调用您实现的__len__
实例方法...但是对于
list
,str
,bytearray
等内置类型,解释器采用了一种捷径:len()
的CPython实现实际上返回了ob_size
C结构中PyVarObject
字段的值,它表示内存中任何可变大小的内置对象。
但是__len__
仍然在至少其中一些定义中...
>>> 'string'.__len__()
6
>>> [1, 2, 3].__len__()
3
如果len
未调用这些方法,这些服务有什么作用?还有其他类似的例子吗?
答案 0 :(得分:1)
默认情况下,CPython实现不会调用__len__()
的事实并不意味着没有Python库或用户程序可以使用。即使CPython在可能的情况下使用快捷方式,保持该方法的可用性也与API的稳定性有关。