इसलिए मैं पायथन के सुपर कॉन्सिडर्ड हार्मफुल का अनुसरण कर रहा था , और उनके उदाहरणों का परीक्षण करने के लिए गया।
हालाँकि, उदाहरण 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।
अब, जाहिर है कि श्री नाइट ने अपने उदाहरणों पर काम करने की उम्मीद की है, तो क्या यह कुछ ऐसा है जिसे पायथन के हाल के संस्करणों में बदल दिया गया था? मैंने 2.6 और 2.7 की जाँच की, और यह दोनों पर विफल है।
तो इस समस्या से निपटने का सही तरीका क्या है?