ดังนั้นฉันจึงติดตามSuper ถือว่าเป็นอันตรายของ 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ตัวเองละเมิดหนึ่งของการปฏิบัติที่ดีที่สุดที่กล่าวถึงในเอกสารซึ่งเป็นว่าวิธีการที่ใช้superจะต้องยอมรับและ*args**kwargs
ตอนนี้เห็นได้ชัดว่านายอัศวินคาดว่าตัวอย่างของเขาจะใช้งานได้ดังนั้นสิ่งนี้มีการเปลี่ยนแปลงใน Python เวอร์ชันล่าสุดหรือไม่? ฉันตรวจสอบ 2.6 และ 2.7 และล้มเหลวทั้งสองอย่าง
แล้ววิธีที่ถูกต้องในการจัดการกับปัญหานี้คืออะไร?