2016-10-14 96 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)

露面
相關問題