10 Sep
2015
Столкнулся с какой-то глупостью. Веб-приложение. Достаточно крупное. С ветвистыми модулями. От точки входа к модулю как передать конкретно данный для данный сессии коннект к базе данных? Сейчас все функции просто тащат за собой и передают дальше некий env.
да хоть питон, хоть перл. модуль - грубо говоря package в perl, вот то что import в питон. как прокинуть вглубь коннект к базе. вглубь - конечной функции, которая там в пятом колене по иерархии модулей
schors, модули в питоне - это объекты. Передай в объект объект. Не понимаю в чем проблема? Возможно передай по ссылке.
"модули в питоне - это объекты" - эээээ
"Возможно передай по ссылке" - так и фигачить во всех функциях передачу дальше? Я хотел бы узнать как делают
Сейчас я решил немного странным способом. Хотя не вижу почему бы и нет. Я запихал все функции модуля в класс, постановил в спецификации проекта, что объекты нужны для контекстуализации и да, пихаю в объект
schors, ну в питоне вообще все объект ))))
ну так скажем я плохо представляю как модуль как объект
schors, я вот тоже пытаюсь в твои установки врубиться и не пойму в чем проблема. Ну импортнул ты модуль. Он в адресном пространстве твоего приложения. Допустим там объект какой создался. У него где-то там коннект к БД передать надо. Ну так приконекться к БД и отдай ему. Зачем тебе при наличии ООП думать о том, как какой-то внутренней функции чего-то там передастся? Объект - это черный ящик. Ты ему на вход/входы отдал требуемое, с выхода получил что тебе нужно и что там внутри и как обрабатывается - вообще не должно тебя волновать.
А если ты о том, что импортируешь через from {module} import {func} as myfunc, так воспринимай, как реплицирование функции в свое приложение и работай с ней как с функцией.
Может я чего-то не так понимаю?
"Допустим там объект какой создался" - нет, я пишу REST, там нет состояний, нет смысла в объектах от слова совсем. всё процедурно.
schors, ну функцию ты импортнул фактически тогда. И в чем проблема? Передай ей коннект. Она, если ей надо, притянет всю остальную тряхомудию сзади неё. И передаст ей коннект. Адресное пространство будет все равно одно.
schors, дошло. Ты хочешь между вызовами передавать объект? Не. Не выйдет наверное без такой хреноты как в PHP был pconnect.
да не, я просто начал смущаться аргумента db_connect во 120 функциях. но я уже написал как в итоге сделал. я действительно создаю объект как экземпляр контекста исполнения
грубо говоря, я не постеснялся бы глобальное переменной, но она не тредсейф
ООП вообще гавно именно вот таким подходом. да, я считаю, что до разумных пределов чёрного ящика быть не должно и должно быть всё прозрачно
schors, зачем ты тогда в питон? Иди в ГО.
тебя не смущает, что GO это ООП во все дыры?
schors, бвахаха! Go - не ООП. Ну не классическое ООП скажем так.
Вот например http://habrahabr.ru/post/243593/ почему рассказывается.
Ну или вот тут на буржуйско и более развесисто
http://spf13.com/post/is-go-object-oriented/
не общепринятое так скажем. но Plan 9 это вполне ООП аж с участием мёртвого страуса