@madwayz1337

Как мне расширить конструктор класса X конструктором класса N?

Есть такой код:
class CmdHandler:
       def __init__(self, server):
              self.somearg = 1

class Server(object):
    def __init__(self):
        self.event = None
        self.obj = None
        self.cmd = None
        self.args = None

    def handler(self):
       CmdHandler(self)


Как расширить конструктор класса CmdHandler конструктором класса Server? Писать вручную атрибуты - не вариант, а наследование не подойдёт.
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 2
Решение в лоб, просто накатить все аргументы из server. Но по-хорошему, лучше через наследование или свойства или еще что-нибудь сделать что бы было явно
class CmdHandler:
    def __init__(self, server):
        self.somearg = 1
        self.__dict__.update({k: v for k, v in server.__dict__.items() if not k.startswith("_")})


class Server(object):
    def __init__(self):
        self.event = "None Server "
        self.obj = None
        self.cmd = None
        self.args = None

    def handler(self):
        return CmdHandler(self)


h = Server().handler()
print(h.event)

>None Server
Ответ написан
@Zanak
Не очень понял, при каких обстоятельствах возник этот кейс, поэтому вопросы:
- расширить класс X до класса N разве не означает, что N является потомком X?
- в методе handler родитель создает инстанс потомка, вы уверены, что это правильно?

Здесь, на мой взгляд, напрашивается наследование или инкапсуляция.
Если CmdHandler расширяет Server, то можно использовать наследование, утащив общие методы и данные в родительский класс.
Если классы предназначены для взаимодействия, и их функционал не пересекается, то, я бы, посмотрел в сторону передачи инстанса обработчика конструктору сервера или отдельному методу регистрации в инстансе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы