首页 > 解决方案 > 我的包中的模块具有绕过 __init__.py 的“自我”属性

问题描述

我在 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'>

标签: python-3.xinstallationpackage

解决方案


package.package是一个模块,它里面有函数,所以你可以访问它们package.package.someprivateclass。仅仅因为您已经从.packageinto导入了一些名称,__init__.py并不意味着您尚未导入的名称将被隐藏。


推荐阅读