Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2016 15:25:04

fura
Зарегистрирован: 2016-10-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно написать модуль?

Всем привет!

Пытаюсь сделать модуль. Но т.к. кода очень много, хочу разбить его на разные файлы.
Логически получается так что каждый файл - это отдельный класс.
Один “основной” класс и куча “дополнительных”.

Но есть проблема - все эти части-классы работают с общими данными.

И получается когда основной класс вызывает дополнительные классы, то приходится постоянно передавать кучу переменных при вызове.

Пример:

 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

Извне модуль вызывается через manager.

Подскажите пожалуйста как в питоне грамотно спроектировать такое?

python 2.7

Спасибо.

Отредактировано fura (Окт. 22, 2016 15:26:30)

Офлайн

#2 Окт. 22, 2016 15:36:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как правильно написать модуль?

Вы можете передавать не self.param1,self.param2,self.param3,…,self.param4, а просто self, и пусть конкретные реализации сами разбираются, какие параметры им нужны.



Офлайн

#3 Окт. 22, 2016 15:58:25

fura
Зарегистрирован: 2016-10-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно написать модуль?

FishHook
Вы можете передавать не self.param1,self.param2,self.param3,…,self.param4, а просто self, и пусть конкретные реализации сами разбираются, какие параметры им нужны.
Попробовал, стало выглядеть лучше, спасибо.
Хотел еще уточнить: такое написание модуля нормальная практика (про разбивку и в частности передача self)?
Например, с этим кодом потребуется работать кому-то постороннему, он не ужаснется, сможет ли понять что тут вообще творится ?

Отредактировано fura (Окт. 22, 2016 15:58:49)

Офлайн

#4 Окт. 22, 2016 16:07:06

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как правильно написать модуль?

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version