Как мне вызвать методы подкласса python из методов суперкласса?

#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 тоже не был вызван.