2011-09-22 42 views
3

在我編寫的程序中,我創建了一個名爲settings的模塊,它聲明瞭一些常量,但從配置文件中加載其他的常量,將它們放入模塊名稱空間中(例如:π的值可能在模塊的代碼中,而是在配置文件中的用戶權重)。PyDev:@DynamicAttrs for modules

這是這樣的,在其他模塊中,我可以這樣做:

from settings import * 

一切工作正常,我可是 - 使用的Aptana Studio中/ PyDev的,代碼分析工具拋出了很多的undefined variable errors這樣的:

enter image description here

我發現here有可用來防止類文檔字符串此行爲的標誌,但它沒有任何效果,如果我嘗試在模塊級使用。所以我想知道兩件事情:

  • 有沒有辦法來選擇擺脫這些錯誤(意思是我不想完全關閉選項「標記爲錯誤的不確定變量」的:在其他模塊可能實際上是一個錯誤)?

  • 如果不是,是否有替代模式來實現我想野生進口的條款,但不會混淆代碼分析工具?

先發制人注:我是非常清楚的事實,野生進口氣餒。

回答

2

實際上,即使它不是一個通配符(即:import settings/settings.MY_VARIABLE仍然會顯示錯誤,因爲代碼分析無法找到它),您可能會得到相同的錯誤。

從每個引用它的地方 @UndefinedVariable

除了(CTRL + 會顯示該選項),我認爲,對於你的模塊一個更好的模式是:

MY_VARIABLE = 'default value' 
... 

update_default_values() # Go on and override the defaults. 

這樣,代碼分析(以及任何讀你的模塊的人)都會知道哪些變量是預期的。否則,如果你以前不知道他們,我認爲更好的方法是採用一種方法(即:get_settings('MY_VARIABLE'))。

與實際問題無關。我真的建議不要在這裏使用野生進口(甚至不需要輸入常量......例如:from settings import MY_VARIABLE)。

用於設置模塊更好的方法是始終使用:

import settings 
settings.MY_VARIABLE 

(因爲否則的話,如果有地方決定它想要改變MY_VARIABLE,已經把參考在自己的命名空間將可能任何地方永遠不會得到改變的變量)。

更安全的方法是使用方法get_setting('var'),因爲它可以讓您更好地延遲您的首選項(即不加載導入,但在第一次調用時)。

+0

首先:感謝您創建了PyDev!這可能是我生命中最有用的代碼之一! :)其次,感謝您的替代建議。最後,我用'import settings as S'重構我的代碼,然後在代碼中使用'S. '。它足夠簡潔,使代碼更具可讀性。 – mac

0

您可以對錯誤使用Ctrl-1,並選擇@UndefinedVariable或在有錯誤的行上鍵入#@UndefinedVariable

您可以嘗試添加要由PyDev解釋器掃描的模塊,方法是轉到Window> Preferences,然後PyDev> Interpreter-Python。在庫選項卡下,單擊New Folder並瀏覽到包含settings的目錄,然後單擊Apply。希望Pydev能夠找到你的軟件包,並識別大量導入的變量。