- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经读过 Can someone explain __all__ in Python?我知道它只影响 from ... import *
语句,但我想不出一个真正的用例。当我可以简单地避免在 __init__
命名空间中导入这些名称时,为什么我应该在 __all__
中重复导出的名称(DRY!)?
例子:
mypackage/__init__.py
from a import A
mypackage/a.py
A = "A"
A1 = "A1"
mypackage/b.py
B = "B"
然后在 python 中:
>>> from mypackage import *
>>> A
'A'
>>>
>>> A1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'A1' is not defined
>>> b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
如您所见,A
在命名空间中,但 A1
和 b
不在。为什么我必须定义 __all__ = ["A"]
?
最佳答案
唯一您想要在包的__init__.py
中定义__all__
的时间是列出您“导出”的成员的名称想要在用户执行时导出:
from package import *
这记录在 6.4.1. Importing * From a Package 中
注意:如果您不在包中定义__all__
,则默认行为如下(来自文档):
If
__all__
is not defined, the statementfrom sound.effects import *
does not import all submodules from the package sound.effects into thecurrent namespace; it only ensures that the package sound.effects hasbeen imported (possibly running any initialization code in__init__.py
) and then imports whatever names are defined in the package. This includes any names defined (and submodules explicitlyloaded) by__init__.py
. It also includes any submodules of the packagethat were explicitly loaded by previous import statements. Considerthis code:
对此的“天真”解释可以是:
If you don't define
__all__
; afrom package import *
will bring in everything from that package and anything imported in that pacakge's__init__.py
.
关于python - 为什么要在 python 包的 __init__ 中使用 __all__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30888683/
我想做这样的事情? # __init__.py import a_module __all__ = [ 'a_module', ] __all__.extend(a_module.__all_
即使我觉得这是一个非常基本的问题,我仍面临着一种我不理解的行为... 假设您有一个 python 包 mypackage包含一个模块 mymodule有 2 个文件 __init__.py和 my_o
默认登录模板中的此代码: {{ form.errors }} 当帐户处于非事件状态时生成此 html 输出: __all__ This account is inactiv
我正在编写一个 Python 模块,在我的一个文件中,我有一个相当复杂的 __all__ 表达式: # foo.py __all__ = [ ... ] 在我希望用户使用的顶级模块中,我想公开所有这些
我正在制作一个具有以下结构的 Python 库: my_amazing_lib +--- __init__.py +--- _core.py +--- _gui.py 在 __init__.py 我有
在一个包中,我在每个模块目录的 __init__.py 中使用一些检查来查看环境是否正常,然后使用 from 。为嵌套模块导入 mod1(此处为 mod1)。每个模块目录依次包含一个 __init__
我试图了解如何使用 __all 管理模块。例如,我有以下结构化代码: main.py |=> /database |=> __init__.py |=> engine (with va
从模块的外部用户的角度来看,两者都是必要的吗? 根据我的理解,通过在隐藏函数前正确加上下划线前缀,它基本上与显式定义 __all__ 做同样的事情,但我一直看到开发人员在他们的代码中同时做这两种事情。
今天我遇到了以下pylint错误: invalid-all-object (E0604): Invalid object %r in __all__, must contain only string
在django/django/db/models/fields/__init__.py有变量: __all__ = [ 'AutoField', 'BLANK_CHOICE_DASH', 'B
我有一个在模块 m 中定义的类 SomeClass 的实例。对于 SomeClass 的行为,我需要访问以下列表: m.__all__ 如何从 SomeClass 的实例访问这个列表? SomeCla
我一直在阅读 cpython HTTP 包的源代码以获得乐趣和利润,并注意到在 server.py 中它们设置了 __all__ 变量,但也为函数使用了前导下划线_quote_html(html)。
一个合适的 Python 模块会在 a list called __all__ 中列出所有的 public 符号.管理该列表可能很乏味,因为您必须将每个符号列出两次。当然有更好的方法,可能是using
这是 Python 中的一个好习惯吗(来自 Active State Recipes -- Public Decorator)? import sys def public(f): """Use
这个问题在这里已经有了答案: What does __all__ mean in Python? (10 个回答) 关闭6年前。 我在 python/Lib 源代码中看到了很多,但我不知道它是干什么用
清理数据后如何在表单顶部添加错误?我有一个对象需要对外部应用程序(谷歌地图)进行 REST 调用作为预保存条件,这可能会失败,这意味着我需要我的用户更正表单中的数据。因此,我清理数据,然后尝试保存并在
TypeError at /api/team/ The `fields` option must be a list or tuple or "__all__". Got str. Request M
这个问题已经有答案了: What does __all__ mean in Python? (10 个回答) 已关闭 3 年前。 Python 包初始化文件可以有变量 __all__列出了使用时要导入
我有以下表单代码: # forms.py class SomeForm(forms.Form): hello = forms.CharField(max_length=40) worl
使用闭包而不是 __all__ 来限制 Python 模块公开的名称是个好主意吗?这将防止程序员意外使用错误的模块名称 (import urllib; urllib.os.getlogin()) 以及
我是一名优秀的程序员,十分优秀!