Найти - Пользователи
Полная версия: Передача данных и настроек в зависимые классы
Начало » Python для новичков » Передача данных и настроек в зависимые классы
1
Solly
В общем есть набор модулей с несколькими классами, один из них основной, остальные используются внутри основного .. Основной инициализируется с конфигом, а так же создает сессию, и эти данные используются в связанных классах. Вопрос собственно такой - как можно более красиво организовать всё, чтобы не передавать каждый раз данные в доп.классы, и всё в одном файле держать не хочется

т.е.
#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)
....
FishHook
Завести глобальную переменную и держать в ней все параметры конфигурации. Для безопасности можно сделать эту переменную неизменяемой.
Solly
ну во-первых глобальные переменные это не есть гуд, а во вторых - у меня параметры конфигурации как раз очень изменяемые, мне нужно чтоб каждый инстанс главного класса работал работал со своими параметрами и эти же параметры использовались в подклассах и в принципе оно так и работает, смущает только что эти параметры надо передавать надо в каждый класс
FishHook
Solly
ну во-первых глобальные переменные это не есть гуд
А теперь обоснуй
AxaRu
FishHook
А теперь обоснуй
Все, конечно зависит от контекста, но в общем случае здесь хорошее обоснование:

FishHook
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
И чем этот класс - не глобальная переменная? И чем этот вариант хуже чем предыдущий? Именно от контекста зависит, не смотря на то, что в статье по дельфи вам написали, что есть набор универсальных “правильных” паттернов. Питон - не дельфи, тут несколько иная идеология: простое лучше сложного, а явное лучше неявного.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB