当我做了一个目录来查找boltons中的方法列表时,我得到了以下输出

>>> import boltons
>>> dir(boltons)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

当我明确地做
>>> from boltons.strutils import camel2under
>>> dir(boltons)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'strutils']

发现strutils被添加到boltons的属性中

为什么 strutils 在显式导入之前没有显示?

最佳答案

docs 关于 dir 的作用:



当我们导入 boltons 包时,我们可以看到 strutils 不是 boltons 对象上的属性。因此,我们不希望它出现在 dir(boltons) 中。

>>>import boltons
>>>getattr(boltons, 'strutils')
AttributeError: module 'boltons' has no attribute 'strutils'

导入子模块的 docs 说:



导入子模块会在包上创建一个属性。在你的例子中:
>>>import boltons
>>>getattr(boltons, 'strutils')
AttributeError: module 'boltons' has no attribute 'strutils'
>>>from boltons.strutils import camel2under
>>>getattr(boltons, 'strutils')
<module 'boltons.strutils' from '/usr/local/lib/python3.5/site-packages/boltons/strutils.py'>

因此,在这种情况下,我们确实希望 strutils 出现在 dir(boltons)

关于python - 在模块上调用 dir 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40037253/

10-12 22:14