在模块上调用dir函数

时间:2016-10-14 07:21:45

标签: python python-2.7

当我找到一个目录来查找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 在显式导入之前没有显示?

1 个答案:

答案 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)