当我找到一个目录来查找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 在显式导入之前没有显示?
答案 0 :(得分:3)
来自docs关于dir的作用:
使用参数,尝试返回有效属性列表 那个对象。
当我们导入boltons包时,我们可以看到strutils不是boltons对象的属性。因此,我们不希望它出现在dir(boltons)
。
>>>import boltons
>>>getattr(boltons, 'strutils')
AttributeError: module 'boltons' has no attribute 'strutils'
导入子模块的docs说:
例如,如果包垃圾邮件包含子模块foo,则在导入spam.foo后,垃圾邮件将具有绑定到子模块的属性foo。
导入子模块会在包上创建一个属性。在您的示例中:
>>>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'>
因此,在这种情况下,我们希望结构显示在dir(boltons)