【发布时间】:2015-05-01 03:34:19
【问题描述】:
我有一个像树形结构一样的包
pkg\
__init__.py
module1.py
Class11
Class12
module2.py
Class21
function21
我希望特定的类和函数位于全局命名空间中,这样当我使用
启动脚本时from pkg import *
我将能够直接使用 Class11、Class12 和 function21。这可能吗?其背后的动机是允许在小型脚本或交互模式下快速轻松地使用。隐含地知道,对于较长的脚本,不会使用 import all 并正确遍历包结构。
编辑:我可以在 pkg 的 __init__.py 中导入 Class11、Class12 和 function21,但是这样,当我执行常规 import pkg 时,我仍然可以通过 pkg.Class11 而不是正确的 @ 访问 Class11 987654326@。如果我不做import *,我最好希望pkg.module1.Class11 成为唯一的方法。
【问题讨论】:
-
为什么你想让
pkg.module1.Class1成为only的方式?它可以是唯一的记录方式,您在在线帮助和示例代码等中显示的方式,但通常,在 Python 中,您不会试图阻止人们做错事,除非它是一个“有吸引力的麻烦”。这就是“同意的成年人”条款的意思——如果你真的需要,你可以很容易地绕过 Python 中的大多数限制,但只要你很清楚你正在这样做并且因此进入了模糊的领域就可以了。 -
请记住,禅宗并没有说“应该只有一种方法可以做到这一点”,而只是“只有一种明显方法”。
-
@abarnert 我知道您通常不会完全限制用户在 Python 中的控制,但我想知道我描述的场景是否有一些约定,例如私有的下划线命名方案变量。虽然,我很喜欢你说的。仅以某种方式记录它与任何粗略指南一样好。我可能会这样做。
标签: python import module package