我寫了一個很好的小應用程序,它可以獲取Yahoo天氣信息並將其發佈到Twitter。它的工作完美無瑕,現在我想將代碼重新排列成不同名稱的文件,因此更有意義。那是我遇到一些問題的時候。將實例作爲函數參數
此前,我有一個Class
在libtweather.py
。這是我的account
。它允許我做,我會得到解析的雅虎天氣的輸出。 (__ini__
接過天氣網址,Twitter的用戶名和密碼參數)
這是從我的主腳本訪問其創建的Class
像這樣的實例:
exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3])
它保存在一個帳號名字列表列表作爲參數傳遞給其他函數。
另一個功能getWeather
做了天氣:
def getWeather(accountList): #account names passed as a list of strings
for item in accountList:
print item, ': ',
item = eval(item)
print item.parseFeed(), '\n
我現在已經決定將getWeather
功能移動到同一個文件作爲Class
但行item = eval(item)
的給我的問題,因爲沒有實例在該文件中創建。所有這些都在主要腳本中。
現在我的問題:有什麼辦法可以將這些實例作爲函數的參數?或者我必須把該功能放入Class
?即使我這樣做,我仍然需要爲列表中的多個項目執行item.parseFeed()
,所以我仍然需要item = eval(item)
,不是嗎?
在此先感謝。我的應用稍微有點整體發佈,但如果需要更好地瞭解,我會發布更多代碼。
更新:我結束了我的運行時libtweather.py
它導入到創建實例,這樣裏面的函數可以訪問它們(添加實例在腳本的底部生成代碼)。我確信有更好的方法,但目前對我來說很有效,我對此很滿意。
爲什麼選擇使用'exec'來創建類的實例有什麼具體的原因嗎? – 2010-08-14 19:12:21
沒有任何。除此之外,這是我在Google上遇到的第一種方式。我知道我可以使用'globals()','vars()'或'locals()'。我正在看他們,看看我將要使用哪一個。 – avacariu 2010-08-14 19:18:59
如果您發現自己需要使用'eval'或'exec',則不要。改爲做其他事情。千萬不要使用它們。除非你需要,當然,這就是爲什麼他們在那裏,但在你不知道你需要他們之前,你必須知道有沒有其他的好方法去做你想做的事。這幾乎從未如此。 – aaronasterling 2010-08-14 20:53:46