তাই আমি পাইথনের সুপার বিবেচিত ক্ষতিকারককে অনুসরণ করছিলাম এবং তার উদাহরণগুলি পরীক্ষা করতে গিয়েছিলাম।
তবে উদাহরণ ১-২ , যা বিভিন্ন যুক্তি প্রত্যাশা করে এমন পদ্ধতিগুলি 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 পরীক্ষা করে দেখেছি এবং এটি উভয় ক্ষেত্রেই ব্যর্থ।
তাহলে এই সমস্যাটি মোকাবেলার সঠিক উপায় কী?