13.11.3 从标准类型派生
1. 不可变类型的例子
>>> class RoundFloat(float):
... def __new__(cls, val):
... return super(RoundFloat, cls).__new__(cls, round(val, 2))
...
>>> RoundFloat(100.1156789)
100.12
>>>
所有的__new__()方法都是类方法,我们要显式地传入类作为第一个参数,这类似于常见的方法__init__()中需要的self。
2. 可变类型的例子
>>> class SortedKeyDict(dict):
... def keys(self):
... return sorted(super(SortedKeyDict, self).keys())
...
>>> SortedKeyDict({"1":1, "2":2, "0":0}).keys()
['0', '1', '2']
>>>
13.11.4 多重继承
同C++一样,Python允许子类继承多个基类。这种特性就是通常所说的多重继承。类的使用的解释顺序是按深度优先。
新式类也有一个__mro__属性来告诉你查找顺序。
>>> class SortedKeyDict(dict): ... def keys(self): ... return sorted(super(SortedKeyDict, self).keys()) ... >>> SortedKeyDict({"1":1, "2":2, "0":0}).keys() ['0', '1', '2'] >>> SortedKeyDict.__mro__ (<class '__main__.SortedKeyDict'>, <type 'dict'>, <type 'object'>) >>>