Я, например, благодарен за этот вопрос, потому что ответ краткий и дает именно необходимые знания. Документация все в порядке, но она многословна и содержит гораздо больше информации, чем то, о чем просил ОП, и, конечно, больше, чем мне нужно. Я просто хотел получить ответ на этот конкретный вопрос, и ответ ниже - именно то, что я хотел. Многим из нас просто не нужны такие формальные или подробные ответы.
Ага, поэтому, когда вы говорите, что имя файла рассматривается как пространство имен, вы бы так что-то вроде этого? «mymodule.var1» для первого случая или «myclass.var1» для второго?
Темный тамплиер
1
Не совсем. Пакет по-прежнему считается частью пространства имен. Если вы хотите сделать то, что вы сказали, то вам нужно сделать из mypackage import mymodule.
Ям Маркович
Возможно, было бы полезно добавить что-то о пакетах пространства имен, для которых не обязательно, чтобы весь код появлялся в одном и том же дереве каталогов.
holdenweb
@holdenweb Никогда не использовал различные механизмы, задействованные там напрямую, поэтому не эксперт. Если вы дадите подробное объяснение об этом в новом ответе, я сошлюсь на него от моего.
Ям Маркович
Наверное, слишком эзотерично, чтобы стоить того - ретроспективно
Ответы:
Модуль Python - это просто исходный файл Python, который может предоставлять классы, функции и глобальные переменные.
При импорте из другого исходного файла Python имя файла обрабатывается как пространство имен.
Пакет Python - это просто каталог модулей (модулей) Python.
Например, представьте следующее дерево каталогов в
/usr/lib/python/site-packages
:Итак, вы бы сделали:
или же
источник