@kondratev-ad

Как организовать взаимодействие классов?

Как организовать взаимодействие между классами?
Например, у меня есть точка входа в классе А, идет инициализация всех классов (А, B, C, D), дальше экземпляр класса А используется в программе для запуска приложения. Приложение запускается и начинает дергать методы класса В. Методы класса В осуществляют некоторую логику, при которой возможен переход в один из классов С или D и работа продолжается там.
Схема
6375024ccceba621989771.png

Методы дергаются только после полной инициализации и запуска приложения.
Вот упрощенный пример кода, но мне кажется он каким-то кривым:
class A():
    def __init__(self):
        print('init A')
        self.b = B(self)
        self.c = C(self)

class B():
    def __init__(self, a):
        print('init B')
        self.a = a

    def method_b(self):
        print(self.a.c.my_atr)
        self.a.c.method_c()

class C():
    def __init__(self, a):
        print('init C')
        self.a = a
        self.my_atr = 'my_atr'

    def method_c(self):
        print('Method C')

if __name__ == '__main__':
    a_class = A()
    a_class.b.method_b()
  • Вопрос задан
  • 487 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ну вот так абстрактно мало что можно посоветовать.
Хотя взаимодействие B, C и D говорит о неудачном распределении обязанностей.
Есть два варианта.

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

Б) Один класс (роутер/машина состояний) определяет, какой сценарий взаимодействия с пользователем сейчас выполняется. Другие классы реализуют по одному сценарию взаимодействия каждый, предоставляя интерфейс, хранение данных и выполнение операций в рамках сценария. Они не реализуют переход между сценариями сами - вместо этого они оповещают роутер о желаемом переходе. А тот уже оповещает текущий сценарий о завершении, подгружает другой сценарий (экзепляр класса) и оповещает его о начале работы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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