fluent-python icon indicating copy to clipboard operation
fluent-python copied to clipboard

《流畅的Python》2015年8月

Results 2 fluent-python issues
Sort by recently updated
recently updated
newest added

第十二章 继承该如何是好 --- > [我们]开始去推动继承思想,使其成为了新手也可以构建以前只有原专家才可以设计的框架。 > > — 阿兰.凯《Smalltalk的早期历史》 本章涉及到了继承和子类化,这里有两处特别强调的针对Python的细节: - 子类化内建类型的陷阱 - 多重继承与方法解析顺序 很多人认为多重继承带来的麻烦远大于其带来的好处。 然而,由于Java特别出色并具有广泛的影响力,这就意味着,在实际编程活动中很多程序员并没有见过多重继承。这就是为什么我们通过两个重要的项目来阐明多重继承的适应范围:`Tkinter GUI`套件,以及Django web 框架的原因。 我们从子类化内建类型的问题开始。余下的章节会用案例研究并学习多重继承,讨论在构建类的分层设计时会遇到的问题。 ## 子类化内建类型是需要些技巧的 在Python2.2之前,子类化`list`或者`dict`这样的内建类型是不可能的。打那以后,Python虽然可以做到子类化内建类型,但是仍然要面对的重要警告是:内建的代码(由C语言重写)并不会调用被通过用户自定义类所覆盖的特殊方法。 对问题的准确描述都放在了`PyPy`文档,以及内建类型的子类化一节中的`PyPy和CPython之间差异`: > 正式地来说,Cpython对完全地重写内建类型的子类方法时是否明确地调用毫无规则可循。大略上,这些方法从来没有被其他的相同对象的内建方法所调用。例如,`dict`子类中的重写`__getitem__()`不会被`get()`这样的内建方法调用。 例子12-1阐明了此问题。 _例子12-1。重写的`__setitem__`被`dict`的`__init__`和`__update__`方法所忽略。_ --- ```...