Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2015 16:17:01

Solly
Зарегистрирован: 2013-10-16
Сообщения: 8
Репутация: +  0  -
Профиль  

Передача данных и настроек в зависимые классы

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

т.е.

#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)

Офлайн

#2 Май 10, 2015 17:54:27

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

Передача данных и настроек в зависимые классы

Завести глобальную переменную и держать в ней все параметры конфигурации. Для безопасности можно сделать эту переменную неизменяемой.



Офлайн

#3 Май 10, 2015 18:23:47

Solly
Зарегистрирован: 2013-10-16
Сообщения: 8
Репутация: +  0  -
Профиль  

Передача данных и настроек в зависимые классы

ну во-первых глобальные переменные это не есть гуд, а во вторых - у меня параметры конфигурации как раз очень изменяемые, мне нужно чтоб каждый инстанс главного класса работал работал со своими параметрами и эти же параметры использовались в подклассах и в принципе оно так и работает, смущает только что эти параметры надо передавать надо в каждый класс

Отредактировано Solly (Май 10, 2015 18:37:40)

Офлайн

#4 Май 10, 2015 19:04:13

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

Передача данных и настроек в зависимые классы

Solly
ну во-первых глобальные переменные это не есть гуд
А теперь обоснуй



Офлайн

#5 Май 11, 2015 08:34:48

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Передача данных и настроек в зависимые классы

FishHook
А теперь обоснуй
Все, конечно зависит от контекста, но в общем случае здесь хорошее обоснование:

Отредактировано AxaRu (Май 11, 2015 08:36:21)

Офлайн

#6 Май 11, 2015 10:59:36

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

Передача данных и настроек в зависимые классы

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
И чем этот класс - не глобальная переменная? И чем этот вариант хуже чем предыдущий? Именно от контекста зависит, не смотря на то, что в статье по дельфи вам написали, что есть набор универсальных “правильных” паттернов. Питон - не дельфи, тут несколько иная идеология: простое лучше сложного, а явное лучше неявного.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version