Рассмотрим следующие классы, бег python2.7:Python: вызов переопределенная метод базового класса в базовом классе инициализации
class S(object):
def __init__(self):
print 'Si'
self.reset()
def reset(self):
print 'Sr'
self.a=0
class U1(S):
def reset(self):
print 'U1r'
self.b=0
super(S,self).reset()
Желаемая функциональность, что
- создания экземпляра вызовов базового класса его метод сброса;
- создание экземпляра производного класса вызывает его метод сброса, а также вызывает метод сброса базового класса.
я (1):
>>> print S().a
Si
Sr
0
но не (2):
>>> print U1().b
Si
U1r
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tt.py", line 4, in __init__
self.reset()
File "tt.py", line 14, in reset
super(S,self).reset()
AttributeError: 'super' object has no attribute 'reset'
Что чистый способ получить то, что я хочу? Я предполагаю, что ошибка имеет какое-то отношение к порядку, в котором создается членство классов, но я не могу понять это из документации. , ,
D'ой спасибо Я как-то смотрел на слишком много примеров и понял, что цель дополнительного аргумента заключалась в том, чтобы отличить, какого суперкласса я хотел, если их было несколько. И действительно, поскольку ответы на дубликат, указанные выше, может сделать это, посмотрев на __mro__ и назвав класс до того, который вы хотите (поэтому «родитель» не совсем прав ...) – HST