python-3.x - 我的包中的模块具有绕过 __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'>
解决方案
package.package
是一个模块,它里面有函数,所以你可以访问它们package.package.someprivateclass
。仅仅因为您已经从.package
into导入了一些名称,__init__.py
并不意味着您尚未导入的名称将被隐藏。
推荐阅读
- asp.net-core - .NET Core 中的 IdentityServer 令牌授权
- python - 如何从数据框中删除行,其中字段仅包含破折号/连字符(-),而不影响 python 中的负值
- apache-spark - hive表选择sql列类型异常
- java - 未调用 ZuulFilter
- liquid - 按 Liquid Markup 中对象内的日期时间属性对列表进行排序
- autodesk-forge - 为 guiviewer3d 设置相机位置或状态
- java - Javafx拖放,拖放完成后将元素放入数组中?
- mysql - 如何查看特定事务在表中锁定的数据?
- c# - 如何确定 FieldDeclarationSyntax 的类型是否是 Roslyn 中的接口?
- python - TensorFlow 自己保存一个 SparseTensor