Модули в моем пакете имеют атрибуты self, которые обходят __init__.py - PullRequest
0 голосов
/ 28 марта 2019

Я собрал пакет в Python 3. Проблема в том, что когда я импортирую пакет, каждый модуль получает те функции, которые указаны в __ init __. Py И атрибут с тем же именем, что и у модуля(скажем package.package), в котором есть все функции реального пакета.

Я пытался изменить мои __ init __. py файлы, но я не совсем понял, каконо работает.Мой пакет выглядит так:

package/
    __init__.py
    package.py (same name used here)
    _someprivatestuff.py
    io/
        __init__.py
        io.py
    vis/
        __init__.py
        vis.py

Кулак __ init __. Py содержит следующий импорт:

from .package import exception1
from .package import exception2
from .package import class1
from .package import class2
from .package import class3

Исключения и классы находятся в package.py.

Теперь, если я импортирую модуль, я получу доступ ко всем остальным функциям в package.py и модулям, импортированным в эти файлы python:

import package

package.class1 # this should output 'package.class1'
>>> <class 'package.package.class1'>
package.package.someprivateclass # package.package is somehow accesible
>>> <class 'package.package.someprivateclass'>

1 Ответ

0 голосов
/ 29 марта 2019

package.package - это модуль, в котором есть функции, поэтому вы можете получить к ним доступ как package.package.someprivateclass. То, что вы импортировали некоторые имена из .package в __init__.py, не означает, что имена, которые вы не импортировали, будут скрыты.

...