Вот случилось так, что взял стороннюю либу на проект. И вот прямо таки захотелось мне добавить пару методов к model.py. Тут вариантов было два, дописать прямо в код библиотеки или же как-то "пропатчить" либу.
В принципе первый вариант не плох, как бы даже хороший, но сразу надо помнить, что это уже не та самая либа и с апдейтами будут проблемы.
А как же сделать простой патч.
А для этого есть в питоне такая либа как types. Доку сами помучаете, я же краткий код покажу
from some.model import SomeClass # экспортирую класс который буду патчить
import types
def some_mtd(self):
# do something
SomeClass.some_method = types.MethodType(some_mtd, None, SomeClass)
Вот таким не хитрым способом все новые инстансы класса получат метод some_method, который привязан к функции some_mtd.
Простой monkey patch и со вкусом, но иногда без него будет крайне тяжело.
В принципе первый вариант не плох, как бы даже хороший, но сразу надо помнить, что это уже не та самая либа и с апдейтами будут проблемы.
А как же сделать простой патч.
А для этого есть в питоне такая либа как types. Доку сами помучаете, я же краткий код покажу
from some.model import SomeClass # экспортирую класс который буду патчить
import types
def some_mtd(self):
# do something
SomeClass.some_method = types.MethodType(some_mtd, None, SomeClass)
Вот таким не хитрым способом все новые инстансы класса получат метод some_method, который привязан к функции some_mtd.
Простой monkey patch и со вкусом, но иногда без него будет крайне тяжело.
Комментариев нет:
Отправить комментарий