我是python的新手,我一直在閱讀使用global
將變量傳遞給其他函數的函數,這被認爲是noobie,也是一種不好的做法。我想擺脫使用全局變量,但我不知道該怎麼做。將全局變量傳遞給類和函數的替代方法
現在我有一個我已經在wxPython中創建的UI作爲它自己的單獨的類,並且我有另一個從.ini文件加載設置的類。由於UI中的設置應與.ini中的設置相匹配,因此我如何傳遞這些值?我可以使用類似於:Settings = Settings()
然後將變量定義爲類似self.settings1
的變量,但是之後我必須將Settings
一個全局變量傳遞給我的UI類(如果我在其中分配main()
,則不會這樣做)。
那麼傳遞這些變量的正確和pythonic方法是什麼?
編輯:下面是我正在使用的代碼,我試圖讓它像Alex Martelli的例子那樣工作。下面的代碼保存在Settings.py
:
import ConfigParser
class _Settings():
@property
def enableautodownload(self): return self._enableautodownload
def __init__(self):
self.config = ConfigParser.ConfigParser()
self.config.readfp(open('settings.ini'))
self._enableautodownload=self.config.getboolean('DLSettings', 'enableautodownload')
settings = _Settings()
每當我試着從另一個文件,我得到參考Settings.settings.enableautodownload
:AttributeError: 'module' object has no attribute 'settings'
。我究竟做錯了什麼?
編輯2:不要介意這個問題,我重新輸入了代碼,它現在可以工作,所以它一定是一個簡單的拼寫或語法錯誤。
有些情況下,使用全局變量很好,在這種情況下,在各處傳遞對象的普遍性被不便之處所抵消。但是,當你開始時,你應該避免這種情況,直到你瞭解何時適合。 – 2010-09-04 03:14:25
看起來像正確的導入應該是'從設置導入設置',那麼你可以使用它,比如'print settings.enableautodownload'。 – flow 2010-09-04 14:29:51