3 回答
TA贡献2036条经验 获得超8个赞
字符串确实有一个长度方法: __len__()
Python中的协议是在具有长度的对象上实现此方法,并使用内置len()函数为您调用它,类似于您实现__iter__()和使用内置iter()函数的方式(或者使用后面的方法)对于可迭代的对象,你的场景。
有关更多信息,请参阅模拟容器类型。
以下是关于Python协议主题的很好的阅读:Python和最小惊讶原则
TA贡献2012条经验 获得超12个赞
吉姆对这个问题的回答可能有所帮助; 我把它复制在这里。引用Guido van Rossum:
首先,为了HCI的原因,我选择了len(x)而不是x.len()(def __len __()来得晚了)。实际上有两个相互交织的原因,都是人机交互:
(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号。比较我们将x *(a + b)等公式重写为x a + x b的简单性,以及使用原始OO表示法做同样事情的笨拙。
(b)当我读到代码为len(x)的代码时,我知道它是在询问某些东西的长度。这告诉我两件事:结果是一个整数,参数是某种容器。相反,当我读取x.len()时,我必须知道x是某种实现接口的容器,或者是从具有标准len()的类继承的。当没有实现映射的类具有get()或keys()方法,或者不是文件的类具有write()方法时,见证我们偶尔会遇到的混淆。
用另一种方式说同样的事情,我认为'len'是一种内置操作。我不想失去那个。/ ...... /
添加回答
举报