所以我跟随 巨蟒被认为是超级有害的,去测试他的例子。
然而,例子1-3应该显示在处理期望不同参数的 __init__方法时调用 super的正确方法,但是它不起作用。
这就是我得到的:
~ $ python example1-3.py
MRO: ['E', 'C', 'A', 'D', 'B', 'object']
E arg= 10
C arg= 10
A
D arg= 10
B
Traceback (most recent call last):
File "Download/example1-3.py", line 27, in <module>
E(arg=10)
File "Download/example1-3.py", line 24, in __init__
super(E, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 14, in __init__
super(C, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 4, in __init__
super(A, self).__init__(*args, **kwargs)
File "Download/example1-3.py", line 19, in __init__
super(D, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 9, in __init__
super(B, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
似乎 object本身违反了文档中提到的最佳实践之一,即使用 super的方法必须接受 *args和 **kwargs。
现在,很明显 Knight 先生希望他的示例能够正常工作,那么在最近的 Python 版本中是否有所改变呢?我检查了2.6和2.7,两个都失败了。
那么处理这个问题的正确方法是什么呢?