Форум сайта python.su
0
Всех приветствую!
class BaseHandler(object): def __init__(self): self.hello = 'hello' class One(BaseHandler): def __init__(self, arg): self.arg = arg BaseHandler.__init__(self) self.run() def run(self): print("%s : %s" % (self.hello, self.arg)) class Two(BaseHandler): def __init__(self, arg): self.arg = arg BaseHandler.__init__(self) self.run() def run(self): print("%s : %s" % (self.hello, self.arg))
Офлайн
568
Во-первых, вы используете объекты “нового типа”, а используете “старый” синтаксис. Прочитайте про встроенную функцию super.
Во-вторых, наследование в ООП как раз и придумано, чтобы избежать дублирования кода. Повторяющийся код выносится в родительские классы или классы примеси и таким образом в наследуемых классах общий функционал реализуется автоматически. В вашем случает все что повторяется нужно реализовать в базовом классе.
Офлайн
221
Так у вас тут One от Two не отличается. Ну сделайте так:
class BaseHandler(object): def __init__(self): self.hello = 'hello' class AnotherHandler(BaseHandler): def __init__(self, arg): self.arg = arg BaseHandler.__init__(self) self.run() def run(self): print("%s : %s" % (self.hello, self.arg)) class One(Another):pass class Two(Another):pass
Офлайн
0
JOHN_16
Благодарю за пример, оказывается все проще :)
FishHook
Да я все понимаю, просто до этого всю дорогу писал в императивном стиле, а не так давно стал изучать ооп и походу дела применять это на практике.
Еще кстати вот про функцию super(), если к примеру класс наследуется от двух классов, как в таком случае инициализировать конструктор ребенка, при помощи super() ?
Офлайн
568
lobsterПитон сам всё разрулит, не переживайте. Если вас интересует, в каком порядке наследуются члены класса, то читайте доку, там всё есть. Извините, но форум - это не то место, где вам будут рассказывать азбучные истины изложенные в любом учебнике. Читайте учебник, а уж если вы прочтенного не поймёте, тогда приходите за разъяснениями.
как в таком случае инициализировать конструктор ребенка, при помощи super()
Офлайн
0
FishHook
Все понятно, Спасибо!
Офлайн