#python #subclass #init #super #abc
#python #подкласс #инициализация #супер #abc
Вопрос:
У меня есть следующий тип настройки суперкласса / подкласса:
class SuperClass(object):
def __init__(self):
self.do_something() # requires the do_something method always be called
def do_something(self):
raise NotImplementedError
class SubClass(SuperClass):
def __init__(self):
super(SuperClass, self).__init__() # this should do_something
def do_something(self):
print "hello"
Я бы хотел, чтобы инициализация суперкласса всегда вызывала еще не реализованный метод do_something . Я использую python 2.7. Возможно, ABC может это сделать, но есть ли другой способ?
Спасибо.
Комментарии:
1. Прямо сейчас инициализация подкласса вызывает не инициализацию суперкласса, а инициализацию суперкласса суперкласса, который является object . Таким образом, init вообще не вызывает do_something . Вы уверены, что это то поведение, которое вы хотите для него?
Ответ №1:
Ваш код в основном правильный, за исключением использования super
. Вам нужно указать текущее имя класса в super
вызове, чтобы оно было:
super(SubClass, self).__init__()
Поскольку вы ввели неправильное имя класса, SuperClass.__init__
он не был вызван и в результате do_something
тоже не был вызван.