Как я вызываю подклассные методы Python из методов суперкласса? - PullRequest
0 голосов
/ 16 октября 2011

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

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. Я использую Python 2.7. Возможно, ABC может сделать это, но есть ли другой путь?

Спасибо.

1 Ответ

9 голосов
/ 16 октября 2011

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

super(SubClass, self).__init__()

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

...