在全局范围中提供一些默认方法(如len函数)的原因是什么,而不是在实例级别提供它们,例如:
list.len()
代替:
len (list)
我发现像len这样的方法比实例方法更难发现.
这背后有什么理由吗?
这个问题很相似,这一个.答案是一样的:
因为Python的创建者Guido van Rossum认为前缀表示法在某些情况下更具可读性.这是完整的答案.我要引用一些部分:
(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号.比较我们将x*(a + b)等公式重写为x a + x b的简单性,以及使用原始OO表示法做同样事情的笨拙.
(b)当我阅读len(x)代码时,我知道它是在询问某些东西的长度.这告诉我两件事:结果是一个整数,参数是某种容器.相反,当我读取x.len()时,我必须知道x是某种实现接口的容器,或者是从具有标准len()的类继承的.当没有实现映射的类具有get()或keys()方法,或者不是文件的类具有write()方法时,见证我们偶尔会遇到的混淆.
用另一种方式说同样的事情,我认为'len'是一种内置 操作.我不想失去那个.我不能肯定地说你是否意味着,但是'def len(self):......'听起来好像你想把它降级为普通的方法.我非常喜欢这个.