Шаблон проектирования родитель-потомок Python

Я понимаю, что название ужасное, пожалуйста, не стесняйтесь изменить его или предложить изменения (я новичок в дизайне шаблонов)

У меня есть веб-приложение Dash на основе Python (не совсем актуальное), и я хочу добавить к нему некоторую структуру, однако я не уверен, какой шаблон проектирования использовать.

Структура, которую я пробовал, была:

-- Parent object (initializes all the configuration and instantiates a data object that the rest of the children will need to use)
|
|- Have child objects with methods that return the layout, which I want to be able to call from the parent object

Однако я понял, что это, вероятно, не лучший подход, поскольку сложно вызвать дочерний метод из родительского объекта.

Вот пример:

class Parent:
    def __init__(self):
        self.data = VaccinationData() <-- created parent so I can use this data in entire project
        self.app = dash.Dash()
        self.set_layout()

    def set_layout(self):
        self.app.layout = html.Div(self.child_method()) <-- calling child method

class Child(Parent):
    def child_method(self):
        # Does some data processing with self.data
        return html.Div(
            className="right",
            children=[self.top_stats(), self.pred_full_vacc()], <-- calling more child's child methods
        )
    
if __name__ == "__main__":
    app = Parent()
    app.app.run_server(debug=True)

Я новичок в размышлениях о шаблонах проектирования, поэтому буду признателен за любую помощь!


person Ken    schedule 18.03.2021    source источник
comment
Что ты пытаешься сделать? шаблон проектирования зависит от вашего использования, если вам нужен динамический макет, вам понадобится, например, заводской шаблон, если вы хотите интерактивную перекрестную фигуру, вам нужен шаблон наблюдателя и т. д.   -  person Igna    schedule 18.03.2021
comment
Я хочу иметь возможность просто создавать экземпляр родительского класса, а родительский класс делать все остальное (вызывая дочерние методы), это трудно объяснить, я мог бы просто сохранить его без использования классов   -  person Ken    schedule 19.03.2021


Ответы (1)


Я понимаю, что вы пытаетесь создать связь между классами для сосуществования, а классы Parent и Child действительно связаны с родителем и их детьми (поскольку объявлены данные вакцинации). В этом случае вы можете создать родительский класс (Person) и 2 дочерних класса (Parent и Child). Таким образом, вы можете организовать свой код так, чтобы оставить методы, доступ к которым нужен обоим дочерним классам, в родительском классе. Попробуйте связать классы с помощью кода (например, создайте экземпляр переменной в методе init дочернего элемента, который требует ввода экземпляра родителя).

person fchagassjr    schedule 19.03.2021
comment
Спасибо, так вы имеете в виду, что у меня должен быть класс верхнего уровня (Person), тогда родительский и дочерний классы будут дочерними для человека? Означает ли это, что родитель и ребенок являются братьями и сестрами? - person Ken; 19.03.2021
comment
Да, они были бы братьями и сестрами. Другим вариантом будет оценка, если эти 2 класса не могут быть представлены только одним. Я не уверен, глядя на фрагмент кода, который вы разместили, но, возможно, их объединение сделает ваш код более понятным. Если вы используете только Parent для создания экземпляров, а у Child есть методы, почему бы не создать один класс со всеми этими методами вместе? - person fchagassjr; 21.03.2021