Re: [問題] 請問一些變數使用的模式
※ 引述《NewSpec (新規格)》之銘言:
: 想請問各位
: 我們在撰寫程式碼的時候
: 多少都會用到 logger, database connection 這種只需初始化一次
: 然後在整個module中會被用到很多次的物件
: 所以看起來, 這些物件似乎都應該設成global的
: 但Python官方卻不建議這麼作
: 那像這種情況各位是怎麼處理的呢?
: 有人能示範一下比較好的使用模式, 或給予一些文件指教一下的嗎
: 謝謝囉^^
雖然我之前推 Borg pattern, 不過想了一下好像不太對...
看起來原 po 只是想要在 module 中有一個可以方便存取的一次性變數
那麼這樣子用 Borg pattern 感覺是脫褲子放屁, 沒什麼意義
Python module 本身就是個 namespace, 沒什麼汙染全域空間的問題
反正 Python 本來就沒有 private 的概念, 只要有心什麼內部變數都拿得到
不如就大方一點用(module 內的)全域變數我覺得其實沒差
大不了加個底線警告其他 module 不要亂搞就是了
不過用全域變數還有個危險, 是可能不小心自己搞到自己(例如覆寫掉原本的值)
所以如果你還是想要有基本的安全性, 可以用一個 getter 把這個變數包起來
def create_foo():
# ... create and return a value for foo
_foo = create_foo()
def get_foo():
return _foo
當然這樣還是有可能不小心碰到 _foo, 其實我們可以做得更好
我們知道 Python 的任何 function 都是一個完整的 object
所以可以這樣包裝
def get_foo():
if not get_foo._foo:
get_foo._foo = create_foo()
return get_foo._foo
這樣應該十分 fool-proof 了吧
如果你能在程式其他地方寫出 get_foo._foo 還不覺得有問題那我也服了你
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
→
02/04 07:50, , 1F
02/04 07:50, 1F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章