Jadi saya mengikuti Python's Super Dianggap Berbahaya , dan pergi untuk menguji contohnya.
Namun, Contoh 1-3 , yang seharusnya menunjukkan cara pemanggilan yang benar supersaat menangani __init__metode yang mengharapkan argumen berbeda, tidak berhasil.
Inilah yang saya dapatkan:
~ $ 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
Tampaknya itu objectsendiri melanggar salah satu praktik terbaik yang disebutkan dalam dokumen, yaitu metode yang digunakan superharus menerima *argsdan **kwargs.
Sekarang, jelas Tuan Knight mengharapkan contohnya bekerja, jadi apakah ini sesuatu yang telah diubah dalam versi terbaru Python? Saya memeriksa 2.6 dan 2.7, dan gagal pada keduanya.
Jadi bagaimana cara yang benar untuk mengatasi masalah ini?