Найти - Пользователи
Полная версия: ооп наследование
Начало » Python для новичков » ооп наследование
1
lobster
Всех приветствую!
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))
Возможно ли, как нибудь вынести конструктор детей(One, Two, …) в отдельный класс или функцию, чтобы избежать дублирование кода?
FishHook
Во-первых, вы используете объекты “нового типа”, а используете “старый” синтаксис. Прочитайте про встроенную функцию super.
Во-вторых, наследование в ООП как раз и придумано, чтобы избежать дублирования кода. Повторяющийся код выносится в родительские классы или классы примеси и таким образом в наследуемых классах общий функционал реализуется автоматически. В вашем случает все что повторяется нужно реализовать в базовом классе.
JOHN_16
Так у вас тут 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
lobster
JOHN_16
Благодарю за пример, оказывается все проще :)
FishHook
Да я все понимаю, просто до этого всю дорогу писал в императивном стиле, а не так давно стал изучать ооп и походу дела применять это на практике.
Еще кстати вот про функцию super(), если к примеру класс наследуется от двух классов, как в таком случае инициализировать конструктор ребенка, при помощи super() ?
FishHook
lobster
как в таком случае инициализировать конструктор ребенка, при помощи super()
Питон сам всё разрулит, не переживайте. Если вас интересует, в каком порядке наследуются члены класса, то читайте доку, там всё есть. Извините, но форум - это не то место, где вам будут рассказывать азбучные истины изложенные в любом учебнике. Читайте учебник, а уж если вы прочтенного не поймёте, тогда приходите за разъяснениями.
lobster
FishHook
Все понятно, Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB