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

У меня есть следующий вид настройки суперкласса/подкласса:

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"

Я хотел бы, чтобы инициализация SuperClass всегда вызывала еще не реализованный метод do_something. Я использую питон 2.7. Возможно, ABC может это сделать, но есть ли другой способ?

Спасибо.


person Eyal    schedule 16.10.2011    source источник
comment
Прямо сейчас инициализация подкласса вызывает не инициализацию суперкласса, а инициализацию суперкласса суперкласса, который является объектом. Таким образом, init вообще не вызывает do_something. Вы уверены, что это то поведение, которое вы хотите для него?   -  person Yanshuai Cao    schedule 16.10.2011


Ответы (1)


Ваш код в основном правильный, за исключением использования super. Вам нужно поместить текущее имя класса в вызов super, так что это будет:

super(SubClass, self).__init__()

Поскольку вы указали неправильное имя класса, SuperClass.__init__ не вызывался, и в результате do_something тоже не вызывался.

person interjay    schedule 16.10.2011