7-7<X5> fileinfo.xml 对象和面向对象
Contents
5.1 概览
pass
5.2 使用 from module import 导入模块
Para 3:添加了译注,指出文中的错误(和 Mark 联系上后移除)
5.3 类的定义
例5.4, (1):把原来的译注移到脚注<footnote>里面去了
例5.4下, 提示:不像在 Java 中有一个特殊的像 extends 的
关键字。
例5.5:初始化 FileInfo Class
没有翻译?!
类
例5.5, (2), Line -1:……但 __init__ 是在 Python 中你可以得到的最接近构造函数的东西,并且它也扮演着非常相同
的角色。
相似
例5.5, (4):__init__ 方法可以接受任意个数的参数,就像函数一样,参数可以用缺省值定义,可以设置成对于调用者可选。
__init__ 方法可以接受任意数目的参数,就像函数一样,参数可以用缺省值定义,即可以设置成对于调用者可选。
例5.6, (1):Python 不是这样,你必须显示地调用在父类中的适合
方法。
合适
5.4 类的实例化
Para 1:……为了对类进行实例化,只要调用类,好像它是一个函数……
要对类进行实例化,只要调用类(就好像它是一个函数)……
例5.7, (4):修正一处格式化错误(不再列出)。
例5.8, (1):然后函数结束
时 没有释放 f
5.5 探索 UserDict:一个封装类
Para 1:如你所见,FileInfo 是一个像字典一样动作的类。
如你所见,FileInfo 是一个有着像字典一样的行为方式的类。
例5.9, (5), Line -1:你可以用这种语法,或者可以在后面的行拥有缩近代码……
写下
例5.9下, Para 1:一个类可以有同名的多个方法,但这些方法或者是参数个数不同,或
参数的类型不同。
为保持一致,
或者是
例5.9下, Para 2:Guido, the original author of Python, explains method overriding this way: "Derived classes may override methods of their base classes. Because methods have no special privileges when calling other methods of the same object, a method of a base class that calls another method defined in the same base class, may in fact end up calling a method of a derived class that overrides it. (For C++ programmers: all methods in Python are effectively virtual.)" If that doesn't make sense to you (it confuses the hell out of me), feel free to ignore it. I just thought I'd pass it along.
Python 的原作者 Guido 是这样解释方法覆盖的 “子类可以覆盖父类中的方法。因为方法没有特殊的优先级设置,在调用同一对象的另外方法时,父类中一个方法对另一个同类中的方法的调用,可能其实调用到的却是一个子类中覆盖父类同名方法的方法。(对于 C++ 程序员,所有的 Python 方法都非常有效)” 如果你不明白(它另我颇感困惑),不必在意。我想我要跳过它。
明显这位兄台没有理解 Guido 的话,也不懂 C++。
Python 的原作者 Guido 是这样解释方法覆盖的:“子类可以覆盖父类中的方法。因为方法没有特殊的优先级设置,父类中的一个方法在调用同类中的另一方法时,可能其实调用到的却是一个子类中覆盖父类同名方法的方法。(C++ 程序员可能会这样想:所有的 Python 方法都是虚函数。)”如果你不明白(它另我颇感困惑),不必在意。我想我要跳过它。
同时添加了一段译注,帮助读者理解。
例5.10, (1), Line -1:在你忘记的情况下
,字典的 clear 方法删除它的所有关键字和关键字相应的值。
你可能已经忘了
例5.10, (3):我们使用 __class__ 属性来查看是否 self 是
一个 UserDict……
self 是否是
例5.10, (4), Line -1:是否你想到要自已研究它了呢?
你是否已经
5.6 专用类方法
Para 1:除了普通的类方法,还有一些对于 Python 类可以定义的专用方法。
除了普通的类方法,对于 Python 类还有一些可以定义的专用方法。
例5.14上, Para -1, Line -1:它还要在文件自身内进行搜索 MP3 的标记然后填充一整套关键字集合
。下面的例子将展示其如何工作。
工作方式
例5.14, (1):注意我们的 __setitem__ 方法严格按照 与 父类方法相同的形式进行定义。
例5.14, (4):注意,我们在调用直接父类,FileInfo,尽管它没有一个
__setitem__ 方法。没问题,因为 Python 将会沿着父类树走,直到它找到一个有着
我们正在调用方法的类,……
拥有
例5.15, (2):关键字触发了 MP3FileInfo 上的 __setitem__ 方法(而 不是 UserDict 的)
5.7 高级专用类方法
例5.16下, 注解:关于 Java 的技术评注翻译了两次。合并为一次。
注解下, Para 2:任何类可以表现得像一个序列,只要通过
定义 __getitem__ 方法。
同上:并且如果你的类表现 为 拥有类似长度的东西……
进一步阅读上:允许你在类实例上进行加,减,和
执行其它算数操作。
以及
5.8 类属性介绍
例5.17, (2):它是
在创建任何类实例之前就有效了。
例5.17下:在 Java 中,静态变量和实例变量两者
都 是紧跟在类定义之后定义的……
同上:到后面
,它只会把你(或其它人)搞乱。
最后
5.9 私有函数
pass
5.10 小结
子类化 UserDict 来定义作为
像字典的类
行为