Форум сайта python.su
Всем доброго. Воткнулся в хрень и не могу оставить… Уже и дескрипторы и декораторы и мета пробовал, но не могу добиться автодополнения от PyCharm
Надо типа а-ля foreign_key и one_to_one как в models.Model Django. Надо, ох как надо автодополнение (широкая структура большой вложенности намечается), а к другой архитектуре кода не хочется прибегать. Так все лаконично и привычно.
Подскажите чем кто может.
class Block: def __init__(self, obj, prop): self.obj = obj self.__prop = prop class Elements: elems = "property_elems" class Main: block_elems = Block(Elements, prop="prop_block") elems = Main.block_elems.elems
Отредактировано zavx0z (Янв. 14, 2017 18:16:21)
Офлайн
Похоже Python не дает вариантов для PyCharm в этом случае. Уже все способы попробовал, какие в голову пришли, в книгах нашел, в YouTube, Google… ппц двум с половиной суток… досадно. Чтоб придумать то подобное
Офлайн
менять архитектуру приложения потому что в IDE не работает автодополнение….. я запомню это.
Миллион раз обсуждалась основная тема - из за динамической типизации невозможно сделать полностью грамотное автодополнение (например как в VisualStudio при работе с C/C++ или Delphi и тп).
Конкретно в вашем случае я ниче не понял. Причем тут декораторы, мета … да и в коде вашем .elems не существует
Офлайн
JOHN_16Мета и дискрипторы я не стал в коде показывать, все равно они не оправдывают ожидания. Хотел только показать связь в модели.
Причем тут декораторы, мета … да и в коде вашем .elems не существует
Main.block_elems
Main.block_elems.elems
Main.block_elems.elems_property
Main.block_elems.elems.text
Отредактировано zavx0z (Янв. 15, 2017 06:46:55)
Офлайн
JOHN_16Да, может и такое быть. Для меня основным приоритетом является удобное использование моделей для скорости написания основного кода приложения, где вся элементы вложенной структуры многократно взаимодействуют. Тем более что это должен быть фреймворк для множества проектов. И если по большой портянке в несколько тысяч строк искать отношения… или постоянно перемещаться по файлам в поисках связей… не продуктивно как-то получается и сулит получить кучу эксепшенов.
менять архитектуру приложения потому что в IDE не работает автодополнение….. я запомню это.
Отредактировано zavx0z (Янв. 15, 2017 06:49:34)
Офлайн
JOHN_16Возможно все… вот только еще пока никто не сделал.
из за динамической типизации невозможно сделать полностью грамотное автодополнение
Офлайн
zavx0z
Есть такое понятие - хороший стиль программирования. Один из пунктов хорошего стиля - автодокументация кода. И питон не исключение, автодокументация кода в питоне делается так же как и в других языках - комментариями. А пайшарм понимает эти комментарии, более того он понимает несколько стилей этих комментариев. Я бы вам рекомендовал комментарии в стиле sphinx, пайшарм с ними работает замечательно.
Офлайн
FishHook
С документацией у меня все впоряде. Но чем документация поможет в моем случае?
- Автодополнение не заработает в этой модели благодаря документации.
- Документация не поможет в поиске динамических аттрибутов.
Или может я что-то не так понял, или Вы?
Офлайн
zavx0zНе согласен. Тема уже обсуждалась на этом форуме, многие разработчики склоняются к тому что автодополнение в питоне вообще не нужно и то что оно есть это дань привычкам тех кто использует компилируемые языки :).
Без автодополнения ну совсем не удобно. Не так ли?
zavx0zбудет выглядеть так:
Ну и дальше по такому типу может быть очень глубоко.
adads.qeqwe.dfgd.qweq.dfgd.qweq.gjdlkgj.ry = adads.qeqwe.dfgd.qwep.gjdlkgj.ry adads.qeqwe.dfgd.qweq.gjdlkgj.re = adads.qeqwe.dfgd.qwep.gjdlkgj.re[2]
zavx0zТоже не согласен. Вот у меня в одном приложении описания классов по сети с других машин грузятся по алгоритму с использованием шифрования. Как пичарм автодополнение сделает до того как приложение запущено и пройдена аутентификация пользователя? Никак. В общем случае возможно автодополенение в том случае когда вы уже выполнили приложение до определенной точки и вписываете текст программы именно в этом месте. Вы это имеете ввиду? Похоже нет. Просто технология написания программы в питоне может очень существенно отличаться от технологии C, C++, java и т.п. (также как отличаются технологии java и C++) .
Возможно все… вот только еще пока никто не сделал.
Отредактировано doza_and (Янв. 15, 2017 09:26:50)
Офлайн
doza_andКошмар программиста - это когда на форуме задаешь один вопрос, а в ответ получаешь ответы которые только отнимают время. Если такая структура кода нужна, значит она удобна.
Я бы это назвал кошмар программиста.
MainPage.searche_frame.block_resultat.resultats.save_to_db()
MainPage.searche_frame.block_resultat.block_paginator.buttons[2].click()
wd.get("http://www.wwwww.ww/www/www/www2352?page=1#post-173417") searche_frame = wd.find_element_by_id("searche_frime_id") self.wd.switch_to.frame(searshe_frame) WebDriverWait(wd, 10).until(lambda driver: driver.find_elements_by_xpath("//locator")).click()
block_result = MainPage.searche_frame.block_resultat block_result.resultats.save_to_db() block_result.block_paginator.buttons[2].click()
doza_andКогда код такой структуры и вложенности, то автодополнение помогает для сокращения времени. Смотришь на страницу, знаешь что элемент в модели есть, а название забыл. Или забыл родительских элементов имена. А с автодополнением двигаешься и знаешь по дереву когда на лево пойти, когда на право и выбор есть из всех аттрибутов. Нет аттрибута, дополняешь модель, есть аттрибут, Enter и делов-то. Скорость увеличивается, интуитивность перемещения появляется.
многие разработчики склоняются к тому что автодополнение в питоне вообще не нужно
doza_andА у меня не грузится. Мы же в этой теме рассматриваем примеры на моем случае. Не надо расширять абстракции.
Вот у меня в одном приложении описания классов по сети с других машин грузятся
doza_andЭто экспериментальный пример для меньшего напряга мозга на форуме. Если я разверну код который я написал в течении 3х дней эксперементируя различными подходами….
я вообще не увидел использования модулей и пакетов, используются только классы
Отредактировано zavx0z (Янв. 15, 2017 10:38:21)
Офлайн