Форум сайта python.su
В общем есть набор модулей с несколькими классами, один из них основной, остальные используются внутри основного .. Основной инициализируется с конфигом, а так же создает сессию, и эти данные используются в связанных классах. Вопрос собственно такой - как можно более красиво организовать всё, чтобы не передавать каждый раз данные в доп.классы, и всё в одном файле держать не хочется
т.е.
#dop.py class Dop1(object): def __init__(self, *args): do_something() def method_one(): pass def method_two(): pass .... class Dop2(object): def __init__(self, *args): do_something() def method_one(): pass def method_two(): pass ... #...etc #main.py from .dop import (Dop1, Dop2, ...) DEFAULT_CONFIG = {"param1": "val1", "param2": "val2"} class Main(object): def __init__(self, config): self.config = DEFAULT_CONFIG.copy() self.config.update(config) self.session = Session.create(self.config) self.dop1 = Dop1(self.session.id, self.config) self.dop2 = Dop2(self.session.id, self.config) def method(): pass ..... def destroy(): self.session.close() ------------------------- #usage.py from main import Main starter1 = Main(configdict1) starter2 = Main(configdict2) ....
Отредактировано Solly (Май 10, 2015 18:29:13)
Офлайн
568
Завести глобальную переменную и держать в ней все параметры конфигурации. Для безопасности можно сделать эту переменную неизменяемой.
Офлайн
ну во-первых глобальные переменные это не есть гуд, а во вторых - у меня параметры конфигурации как раз очень изменяемые, мне нужно чтоб каждый инстанс главного класса работал работал со своими параметрами и эти же параметры использовались в подклассах и в принципе оно так и работает, смущает только что эти параметры надо передавать надо в каждый класс
Отредактировано Solly (Май 10, 2015 18:37:40)
Офлайн
568
SollyА теперь обоснуй
ну во-первых глобальные переменные это не есть гуд
Офлайн
1
FishHookВсе, конечно зависит от контекста, но в общем случае здесь хорошее обоснование:
А теперь обоснуй
Отредактировано AxaRu (Май 11, 2015 08:36:21)
Офлайн
568
AxaRu
Что именно из приведенных вами размышлений вы считаете хорошим обоснованием? Питон - язык весьма гибкий, каждую задачу обычно можно решить множеством способов. Вопрос в целесообразности и эффективности. Например, в вашем случае, почему не сделать эти некие “параметры” атрибутами базового класса, которые будут просто наследоваться? Типа
class Base(object): param1 = None param2 = None param3 = None class Child1(Base): pass class Child2(Base): pass if __name__ == "__main__": Base.param1 = 1 Base.param2 = 2 Base.param3 = 3 ch1 = Child1() print ch1.param1, ch1.param2, ch1.param3 ch2 = Child2() print ch2.param1, ch2.param2, ch2.param3
class Params: param1 = None param2 = None param3 = None if __name__ == "__main__": Params.param1 = 1 Params.param2 = 2 Params.param3 = 3 print Params.param1, Params.param2, Params.param3
Офлайн