Сортировка, например:
>>> from zope.interface.common.idatetime import *
>>> print IDate.__module__
'zope.interface.common.idatetime'
>>> print Attribute.__module__
'zope.interface.interface'
Модуль Attribute
может показаться удивительным, поскольку это не то место, куда вы импортировали его из , но именно там был определен тип Attribute
. Глядя на zope/interface/common/idatetype.py
, мы видим:
from zope.interface import Interface, Attribute
, что объясняет значение __module__
. Вы также столкнетесь с проблемами с экземплярами типов, импортированных из других модулей. Предположим, вы создали экземпляр Attribute
с именем att
:
>>> att = Attribute('foo')
>>> print att.__module__
'zope.interface.interface'
Опять же, вы узнаете, откуда взялся тип , а не где была определена переменная.
Вполне возможно, что главная причина не использовать импорт подстановочных знаков в том, что вы не знаете, что получаете, и они загрязняют ваше пространство имен и, возможно, перекрывают другие типы / переменные.
>>> class Attribute(object):
... foo = 9
...
>>> print Attribute.foo
9
>>> from zope.interface.common.idatetime import *
>>> print Attribute.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Attribute' has no attribute 'foo'
Даже если сегодня import *
работает без коллизий, нет гарантии, что это не произойдет с будущими обновлениями импортируемого пакета.