2016-06-08 111 views
1

我想要觸發模塊內部的功能,以便導入模塊本身;檢查我的模塊是否導入

從我測試過的似乎我可以檢查是否__name__不是__main__並使用它作爲解決方案;但我想知道是否有更好的方式與某種進口鉤子?

if __name__ != '__main__': 
    # I was imported 
    ... 

我想要修改模塊中存在的對象,該對象只存在於此特定情況下,並且只需修改一次。

我已經取得了成功,但我想知道是否有另一種方法來解決這個問題。

if __name__ == '__main__': 
    example = 0 
else: 
    example = 1 
+1

您是否希望在每次導入時都發生這種情況,或者只是每個解釋器的第一次? – user2357112

+0

[this]的可能重複(http://stackoverflow.com/questions/5027352/how-to-test-if-one-python-module-has-been-imported) – limbo

+1

@limbo問題不是來自正確的視角;我希望從模塊的角度來看。 – jacob

回答

1

Python在導入時運行一次頂層邏輯。可以在stdlib hashlib實現中找到示例(github在此刻關閉)。 https://fossies.org/dox/Python-3.5.1/hashlib_8py_source.html#name=l00131

通知有條件進口使用try...except以及從線#57

57 __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') 
58 
59 algorithms_guaranteed = set(__always_supported) 
60 algorithms_available = set(__always_supported) 

那些是進口創建一次,而不是後續調用頂層線。部分原因是它以這種方式工作的原因是模塊是一個對象並存儲在sys.modules - Py2 but same for Py3中。

編輯:爲了澄清你可以使用像singletons這樣的模塊,但它是瘋狂的道路,因爲它可以使單元測試和調試非常痛苦,如果不是不可能的話。

+0

謝謝你的回答;我不認爲我的問題具體。我已經修改了它,希望能夠更全面地查找我所需要的內容。 – jacob

+0

@jacob這正是Python如何做的,特別是對於測試以及單元測試或實現\ _ \ _main \ _ \ _的應用程序等情況,或者我在您的問題中缺少其他內容? – David

+0

@jacob如果它看起來很愚蠢,但它起作用,並且有人可以理解它的作用,它可能仍然很愚蠢,但它可以工作。 – David

相關問題