我一直在读Dive到Python中的 python的特殊类方法,似乎有些方法有奇怪或不一致的语法.
要从字典中获取项目,您可以调用字典类方法items()
>>> my_dictionary.items()
[('name', 'Old Gregg'), ('Race', 'Scaly Man-Fish')]
Run Code Online (Sandbox Code Playgroud)
但是,要确定该字典中的键数,您可以调用len()它并将其作为参数提供给字典.
>>> len(my_dictionary)
2
Run Code Online (Sandbox Code Playgroud)
我总是假设类似的方法len()实际上并不是你给他们语法调用的任何类的一部分,但在阅读Dive to Python的第5章之后,我发现len()实际上会导致调用字典方法.
my_dictionary.__len__()
Run Code Online (Sandbox Code Playgroud)
那么为什么它和类似的方法被称为典型的类方法呢?
my_dictionary.len()
Run Code Online (Sandbox Code Playgroud)
有没有我不知道的惯例?
gst*_*eff 13
Guido van Rossum 如此解释:
(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号.比较我们将x*(a + b)等公式重写为x a + x b的简单性,以及使用原始OO表示法做同样事情的笨拙.
(b)当我阅读代码时,len(x)我知道它是在询问某些东西的长度.这告诉我两件事:结果是一个整数,参数是某种容器.相反,当我阅读时x.len(),我必须知道x是某种实现接口的容器,或者是从具有标准的类继承的len().当没有实现映射的类有一个get()或一个keys()方法,或者一个不是文件的东西有一个方法时,见证我们偶尔会遇到的困惑write().