Найти - Пользователи
Полная версия: Помогите понять примеры python-inject
Начало » Python для новичков » Помогите понять примеры python-inject
1 2
marina932
Разобраюсь с библиотекой 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 должен быть строкой).

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

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

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

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

Да и вообще меня сейчас уже просто раздирает любопытство, потому что не могу пока понять как запустить даже просто тот пример, что есть в статье или на github.
Помогите сообразить.
PooH
Да вы статью до конца дочитайте :) Там же ниже есть код и Cache и Db и RedisDb и вообще они только для примера внедряемых объектов взяты.
4kpt_IV
Для di это не самая удачная библиотека. Посмотрите в сторону dependency-injections Ромы Могилатова. Там даже UML для того, чтобы разобраться Роман наколбасил. Огромное количество разного рода провайдеров, абстрактные каталоги, интерфейсы для создания своих провайдеров, контроль типов передаваемых зависимостей и т.п. Короче. У меня уже в каждом веб проекте на фласке. Если нужна будет ссылка - пишите.
marina932
4kpt_IV
дайте пожалуйста ссылку на реппозиторий
marina932
4kpt_IV
Спасибо за отличную наводку. Все понятно, примеры рабочие, документация исчерпывающая. Жалко только, что не гуглился эта библиотека. На первой странице выдачи гугла, один треш.
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