Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2016 05:56:18

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

Помогите понять примеры python-inject

Разобраюсь с библиотекой inject (https://github.com/ivankorobkov/python-inject).
Пытаюсь понять пример использования библиотеки из статьи с хабра

 import inject
# Описываем опциональную конфигурацию
def my_config(binder):
    binder.install(my_config2)  # Импортируем другую конфигурацию
    binder.bind(Db, RedisDb('localhost:1234'))
    binder.bind_to_provider(CurrentUser, get_current_user)
 
# Создаем инжектор.
inject.configure(my_config)
# Внедряем зависимости с помощью inject.instance и inject.attr
class User(object):
    db = inject.attr(Db)
    @classmethod
    def load(cls, id):
        return cls.db.load('user', id)
    def __init__(self, id):
        self.id = id
    def save(self):
        self.db.save('user', self)
def foo(bar):
    cache = inject.instance(Cache)
    cache.save('bar', bar)
# Создаем нового пользователя и сохраняем 
# во внедренную базу данных.
user = User(10)
user.save()
Но ступорится все даже банально на том, что не могу запустить этот пример у себя, потому что не определен объект Cache. Либо я чего-то не поняла, либо везде в примере потеряны кавычки (по смыслу вроде как получается, что Cache должен быть строкой).

Поясните пожалуйста, в чем дело.

Офлайн

#2 Июль 17, 2016 08:52:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите понять примеры python-inject

Извините но несколько не в тему. Тут пару раз были обсуждения на тему внедрения зависимостей. И у меня сложилось мнение что даже ярые сторонники этого метода неубедительны когда описывают его пользу в питоне.

примерно так: “А если серьезно — в питоне это не нужно, потому как тут отсутствует строгая типизация, и бороться с ней с помощью инъекций бессмысленно. Это только порождает дополнительную сложность, а это не python way, на мой взгляд.”

А библиотека похоже написана человеком который пол жизни писал на java. И у него на нее мозги уже закрутились.

Может вам просто описать что вы хотите получить от dependency injection?



Отредактировано doza_and (Июль 17, 2016 08:54:58)

Офлайн

#3 Июль 17, 2016 12:28:52

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

Помогите понять примеры python-inject

doza_and
Чтобы уменьшить связанность объектов в приложении и вообще просто разобраться с данным подходом.

Офлайн

#4 Июль 17, 2016 14:39:17

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите понять примеры python-inject

marina932
Чтобы уменьшить связанность объектов
Тогда вам лучше привести пример из вашего приложения в котором по вашему мнению излишняя связность.
marina932
разобраться с данным подходом.
Тут все просто. В питоне можно в любой момент менять как класс так и объект класса. И данный подход похоже не имеет никакого смысла.



Офлайн

#5 Июль 17, 2016 15:49:19

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

Помогите понять примеры python-inject

doza_and
Тогда вам лучше привести пример из вашего приложения в котором по вашему мнению излишняя связность.
Я понимаю, что Вы просто пытаетесь уберечь меня от “безсмысленной” работы и не правильного подхода, но мне надо только лишь разобрать с этой библиотекой и как она работает. Остальное это уже второй вопрос.

Да и вообще меня сейчас уже просто раздирает любопытство, потому что не могу пока понять как запустить даже просто тот пример, что есть в статье или на github.
Помогите сообразить.

Офлайн

#6 Июль 17, 2016 17:43:25

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Помогите понять примеры python-inject

Да вы статью до конца дочитайте :) Там же ниже есть код и Cache и Db и RedisDb и вообще они только для примера внедряемых объектов взяты.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Июль 17, 2016 19:25:01

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Помогите понять примеры python-inject

Для di это не самая удачная библиотека. Посмотрите в сторону dependency-injections Ромы Могилатова. Там даже UML для того, чтобы разобраться Роман наколбасил. Огромное количество разного рода провайдеров, абстрактные каталоги, интерфейсы для создания своих провайдеров, контроль типов передаваемых зависимостей и т.п. Короче. У меня уже в каждом веб проекте на фласке. Если нужна будет ссылка - пишите.

Отредактировано 4kpt_IV (Июль 17, 2016 19:28:28)

Офлайн

#8 Июль 17, 2016 22:55:16

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

Помогите понять примеры python-inject

4kpt_IV
дайте пожалуйста ссылку на реппозиторий

Офлайн

#9 Июль 17, 2016 22:59:11

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Помогите понять примеры python-inject

Офлайн

#10 Июль 18, 2016 17:07:37

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

Помогите понять примеры python-inject

4kpt_IV
Спасибо за отличную наводку. Все понятно, примеры рабочие, документация исчерпывающая. Жалко только, что не гуглился эта библиотека. На первой странице выдачи гугла, один треш.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version