2016-10-14 67 views
3

当我做了一个目录,找到在博尔顿方法列表,我得到了下面的输出一个模块调用dir函数

>>> 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到博尔顿的属性

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

回答

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'> 

因此,在这种情况下,我们预计在strutils dir(boltons)

露面
相关问题