Форум сайта python.su
Разобраюсь с библиотекой 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()
Офлайн
Извините но несколько не в тему. Тут пару раз были обсуждения на тему внедрения зависимостей. И у меня сложилось мнение что даже ярые сторонники этого метода неубедительны когда описывают его пользу в питоне.
примерно так: “А если серьезно — в питоне это не нужно, потому как тут отсутствует строгая типизация, и бороться с ней с помощью инъекций бессмысленно. Это только порождает дополнительную сложность, а это не python way, на мой взгляд.”
А библиотека похоже написана человеком который пол жизни писал на java. И у него на нее мозги уже закрутились.
Может вам просто описать что вы хотите получить от dependency injection?
Отредактировано doza_and (Июль 17, 2016 08:54:58)
Офлайн
doza_and
Чтобы уменьшить связанность объектов в приложении и вообще просто разобраться с данным подходом.
Офлайн
marina932Тогда вам лучше привести пример из вашего приложения в котором по вашему мнению излишняя связность.
Чтобы уменьшить связанность объектов
marina932Тут все просто. В питоне можно в любой момент менять как класс так и объект класса. И данный подход похоже не имеет никакого смысла.
разобраться с данным подходом.
Офлайн
doza_andЯ понимаю, что Вы просто пытаетесь уберечь меня от “безсмысленной” работы и не правильного подхода, но мне надо только лишь разобрать с этой библиотекой и как она работает. Остальное это уже второй вопрос.
Тогда вам лучше привести пример из вашего приложения в котором по вашему мнению излишняя связность.
Офлайн
Да вы статью до конца дочитайте :) Там же ниже есть код и Cache и Db и RedisDb и вообще они только для примера внедряемых объектов взяты.
Офлайн
Для di это не самая удачная библиотека. Посмотрите в сторону dependency-injections Ромы Могилатова. Там даже UML для того, чтобы разобраться Роман наколбасил. Огромное количество разного рода провайдеров, абстрактные каталоги, интерфейсы для создания своих провайдеров, контроль типов передаваемых зависимостей и т.п. Короче. У меня уже в каждом веб проекте на фласке. Если нужна будет ссылка - пишите.
Отредактировано 4kpt_IV (Июль 17, 2016 19:28:28)
Офлайн
4kpt_IV
дайте пожалуйста ссылку на реппозиторий
Офлайн
Офлайн
4kpt_IV
Спасибо за отличную наводку. Все понятно, примеры рабочие, документация исчерпывающая. Жалко только, что не гуглился эта библиотека. На первой странице выдачи гугла, один треш.
Офлайн