Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 26, 2009 14:41:35

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

автоимпорт имен

В пхп есть такая штука автозагрузка классов, идея в том что в одном месте описывается какой файл нужно заинклудить имея определенное имя класса (в файле содержится описание класса), а потом просто идет обращение к классу и все автоматом инклудится, есть ли что подобное в питоне для авто импорта модулей или какие варианты реализаций?



Отредактировано (Дек. 26, 2009 14:42:04)

Офлайн

#2 Дек. 26, 2009 14:45:55

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

автоимпорт имен

1. php - не питон
2. Что именно хочется сделать? На примере, пожалуйста.
3. Чем стандартный импорт не угодил?

Офлайн

#3 Дек. 26, 2009 17:01:03

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

автоимпорт имен

Ferroman
3. Чем стандартный импорт не угодил?
Хотелось чтобы это выполнялось автоматически а не обезьянить вручную, из файла в файл десятками одни и теже импорты.

Раз не очевидно вот пример:
имеем N файлов в обоих используется по Х классов импортируемых с разных мест. вместо описания в кажом из N файлов по X однотипных импортов все это описывается в одном месте и далее напрямую в коде обращаемся к классам.

Ferroman
1. php - не питон
Это тут обсалютно не причем.



Отредактировано (Дек. 26, 2009 17:03:47)

Офлайн

#4 Дек. 26, 2009 17:40:37

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

автоимпорт имен

Честно говоря бредовая идея. Может попробовать с помощью __import__? http://docs.python.org/library/functions.html#__import__ Кладешь имена всех нужных модулей в файл, где нужно его читаешь и импортируешь с помощью __import__

ps. когда в питоне что-то не получается сделать по простому - может ты не в ту сторону движешься?



Офлайн

#5 Дек. 26, 2009 17:56:35

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

автоимпорт имен

expee
Честно говоря бредовая идея.
аргументируй свое утверждение насчет бредовости.

expee
ps. когда в питоне что-то не получается сделать по простому - может ты не в ту сторону движешься?
по твоему тупо из файла в файл повторят код - это проще чем не делать это?

ps. когда где-то принято и написано делать именно так а не иначе, не стоит молится на это.



Офлайн

#6 Дек. 26, 2009 18:40:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

автоимпорт имен

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

Думаю, что попытка импортировать все скопом приведет к форменному бардаку. Но при сильном желании делается легко:
import_all.py

from os.path import abspath, dirname, join
from logging import getLogger
# ....
some_somule.py
from all_modules import *
Согласен, идея плохая и не рекомендуемая. Трудно будет читать код после, возможны интересные side-effects. Но если очень хочется - стоит попробовать. Чтобы набить себе необходимый комплект шишек и через время вернуться к тому, что используют люди во всем мире.



Офлайн

#7 Дек. 26, 2009 18:44:26

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

автоимпорт имен

Явное - лучше неявного.
Простое - лучше сложного.

Честно - не понимаю, в чём проблема, и почему это вообще “проблема”.
Если вы из файла в файл повторяете код, да ещё и так часто, что это уже напрягает - значит у вас фундаментально что-то не так.

Офлайн

#8 Дек. 26, 2009 19:05:54

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

автоимпорт имен

Ferroman
Если вы из файла в файл повторяете код, да ещё и так часто, что это уже напрягает
а у вас нет таких классов которые везде переиспользуются и импорты не повторяются, все в каждом файле с нуля переписываете, и это не напрягает, копи-пастить вам проще? (DRY) зачем повторять если можно избавится от повторений?, явное\неявное это без фанатизма никакой сложности чтобы вынести логику по определению импорта в отдельное место нет и она там объявлена будет вполне явно. Лично меня напрягает каждый раз лезть к верху файла вспомнить где расположен класс писать к нему путь я хочу чтобы это делалось автоматом, а по нужности указывать явно.

Андрей Светлов
Согласен, идея плохая и не рекомендуемая. Трудно будет читать код после, возможны интересные side-effects. Но если очень хочется - стоит попробовать. Чтобы набить себе необходимый комплект шишек и через время вернуться к тому, что используют люди во всем мире.
Имхо вся это проблема решается просто тем что нужно помнить что есть модуль который делает автоимпорт и там все вполне явно объявлено, а если нужно перекрыть имя своим импортом в ручную и все. На самом деле идея схожа с такими паттернами как registry или factory - это глобальные точки для хранения\создания объектов по некоторому ключу, тут по этому ключу делается немного другая задача - импорт.

По поводу этих паттернов же не возникает мысль что это дурная идея? На мой взгляд прямая аналогия.



Отредактировано (Дек. 26, 2009 19:38:19)

Офлайн

#9 Дек. 26, 2009 19:14:57

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

автоимпорт имен

Это, наверное, прозвучит странно, но классов которые ВЕЗДЕ переиспользуются - нет, таких нету. Так что копипастить - не приходится.
Я, честно говоря, затрудняюсь даже придумать когда так может получится.
Явное - всегда лучше неявного, даже, если страдает DRY (кстати, чего быть не может ибо этот принцип относится только именно к коду, к действующему, не к любой строчке текста программы. Смысл не в том что бы не повторять строчки).
Так что проблема диковато звучит, надуманно я бы сказал.

Отредактировано (Дек. 26, 2009 19:15:20)

Офлайн

#10 Дек. 26, 2009 19:36:34

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

автоимпорт имен

Ferroman
Явное - всегда лучше неявного, даже, если страдает DRY
Слово лучше, бредовые это конечно круто, но давайте более аргументировано)

даже если скажем в той же джанге тысячу и один раз из проекта в проект повторять дикие импорты типа
from django.contrib.contenttypes.models import ContentType
которые постоянно завязывают одно имя на один и тот же класс? тут явное повторение тоже лучше? чем оно вам лучше помнить и держать перед глазами этот бессмысленый код, и кучу строчек из таких длинющих импортов?

Ferroman
кстати, чего быть не может ибо этот принцип относится только именно к коду, к действующему, не к любой строчке текста программы.
а импорты это не дествующий код? есть не действующие строчки текста программы?

Ferroman
Смысл не в том что бы не повторять строчки
А в чем смысл?) в том что это “круто” или “лучше” ?)

ps. и кстати еще один + в пользу этого метода в том что можно мониторить все импорты с одного места - большая управляемость.

И кстати даже есть какой-то http://docs.python.org/library/sys.html#sys.meta_path
собственно если это плохая идея зачем эта фича в питоне)



Отредактировано (Дек. 26, 2009 20:22:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version