それで私はPythonの「超熟考」をフォローしていて、彼の例をテストしてみました。
ただし、例1-3は、異なる引数が必要なメソッドをsuper処理__init__するときに正しい呼び出し方法を示すことになっているため、フラットアウトは機能しません。
これは私が得るものです:
~ $ 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自体がドキュメントで言及されているベストプラクティスの1つに違反しているようです。つまり、を使用するメソッドsuperは*argsおよびを受け入れる必要があり**kwargsます。
さて、ナイト氏は明らかに彼の例が機能することを期待していたので、これは最近のバージョンのPythonで変更されたものですか?私は2.6と2.7をチェックしましたが、両方で失敗しました。
それで、この問題に対処する正しい方法は何ですか?
object、それがコールに確認しますobject「S __init__正しく。
__init__をobject暗黙のうちに無視することに注意してください。これはPython 2.6で変更されました。