Тож я слідкував за Супер вважається Питоном Шкідливим і пішов перевірити його приклади.
Однак у прикладі 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, і він не вдається на обох.
То який правильний спосіб вирішити цю проблему?
object, і це гарантує , що на заклик object«S __init__правильно.
__init__при objectбеззвучному ігноруванні будь-яких параметрів на Python 2.5. Це змінилося в Python 2.6.