Форум сайта python.su
0
Всем привет!
Пытаюсь сделать модуль. Но т.к. кода очень много, хочу разбить его на разные файлы.
Логически получается так что каждый файл - это отдельный класс.
Один “основной” класс и куча “дополнительных”.
Но есть проблема - все эти части-классы работают с общими данными.
И получается когда основной класс вызывает дополнительные классы, то приходится постоянно передавать кучу переменных при вызове.
Пример:
Class MMain def manager (self, task_action): if task_action == 'work1': from module_my import mwork1 m = MWork1(self.param1,self.param2,self.param3,...,self.param4) m.dosomething() if task_action == 'action2': from module_my import maction2 m = MAction2(self.param1,self.param2,self.param3,...,self.param7) m.work_with() if task_action == 'action3': from module_my import msomething3 m = MSomething3(self.param1,self.param2,self.param3,...,self.param5) m.create() m.delete ... etc ...
Class MWork1 Class MAction2 Class MSomethin3 ... etc
Отредактировано fura (Окт. 22, 2016 15:26:30)
Офлайн
568
Вы можете передавать не self.param1,self.param2,self.param3,…,self.param4, а просто self, и пусть конкретные реализации сами разбираются, какие параметры им нужны.
Офлайн
0
FishHookПопробовал, стало выглядеть лучше, спасибо.
Вы можете передавать не self.param1,self.param2,self.param3,…,self.param4, а просто self, и пусть конкретные реализации сами разбираются, какие параметры им нужны.
?
Отредактировано fura (Окт. 22, 2016 15:58:49)
Офлайн
568
fura
Ваши классы MAction2 и так далее, они какие-то слишком разные. У каждого какой-то свой метод, у одного create у другого dosomething. Вряд ли так обстоит на самом деле, скорее всего, если вы хорошенько подумаете вы создадите дерево наследования, таким образом, чтобы у похожих задач был общий интерфейс.
Вообще, какая разница классу MMain, что именно делает каждый из “дополнительных”? Пусть у них у всех будет метод run, тогда ваш код становится тривиальным
def manager (self, task_action): {"action1": MWork1, "action2": Mwork2, "action3" : Mwork3}[task_action].run()
Отредактировано FishHook (Окт. 23, 2016 07:50:47)
Офлайн