python: В чем причина запрета * в относительном импорте?

В чем причина запрета * на относительный импорт? например

from ..new_tool import *

или сделать относительный импорт напрямую:

import ..new_tool

person Claudiu    schedule 06.06.2011    source источник
comment
from ..new_tool import * не исправен. Он будет импортировать все, что находится под ..new_tool. Это может создать конфликт с вашим method_name или attribute_name, если ваше объявленное имя совпадает с импортированным именем. Некоторое время могут возникать циклические зависимости..   -  person Tauquir    schedule 07.06.2011
comment
@Tauquir: это относится к любому import *, а не только к относительным.   -  person Claudiu    schedule 07.06.2011
comment
все еще жду ответа на часть import *, которая также не относится к обычной части   -  person Claudiu    schedule 08.06.2011


Ответы (1)


Причина, по которой последнее запрещено, заключается в том, что ..new_tool нельзя использовать в выражении (PEP 328)< /а>:

Причина import .foo запрещена в том, что после

    import XXX.YYY.ZZZ

тогда XXX.YYY.ZZZ можно использовать в выражении. Но

    .moduleY

нельзя использовать в выражении.

Поскольку *-импорт должен быть только быстрым взломом во время разработки, я подозреваю, что функциональность для относительного *-импорта была исключена, потому что в этом нет необходимости.

person Katriel    schedule 06.06.2011
comment
хм, я полагаю, они могли бы сделать import .foo as _foo. хотя хорошо, что в вашем коде нет import *. - person Claudiu; 07.06.2011
comment
Было бы странно разрешить import ... as, но не голый import. - person Katriel; 07.06.2011
comment
истинный. на самом деле, я думаю, вы всегда можете сделать from . import foo, так что вы ничего не потеряете, если не сможете сделать import .foo. - person Claudiu; 07.06.2011