[英]Inherit other file.py globals
你如何從其他 .py 文件繼承全局變量?
例子:
全局變量
test = 'testValue'
索引.py
from globals import *
def setGlobals():
global test
test = 'new Value' # Setting new value to project global
setGlobals()
幫助.py
from globals import *
print test # Should print out 'new Value', but it prints 'testValue'
我希望有一個充滿常量和全局變量的文件,該文件由另一個文件設置並由其他文件使用。 在這個例子中,我在index.py
為全局變量test
設置了新值,並希望在help.py
使用新值。 我對 python 使用了錯誤的方法嗎? 謝謝你。
編輯:事件序列與示例相同,例如,首先我導入,設置新值,然后嘗試從另一個文件打印出新設置的值。
在 Python 中,模塊是對象。 當您進行導入時,您正在復制並可能將一個模塊的屬性重命名到當前模塊中。 但是,這僅復制值(或更具體地說,按值復制引用)。 如果稍后更改導入的模塊,您的副本將不會更改。 一種可能的方法是嘗試將第二個模塊中的全局變量定義為屬性,但我不確定這是否有效。
但是,無論如何,您嘗試做的都是糟糕的設計。 您需要重新思考為什么要在任何地方訪問和修改全局值。 嘗試重構您的代碼並替換依賴注入留下的任何內容。 例如,用一個配置對象替換你的 globals 模塊,你可以將它傳遞給任何需要它的人。
根據:
在index.py
您將刪除:
global test
然后你會改變:
test = 'new Value' # Setting new value to project global
到:
globals.test = 'new Value' # Setting new value to project global
在help.py
你會改變:
print test # Should print out 'new Value', but it prints 'testValue'
到:
print globals.test # Should print out 'new Value', but it prints 'testValue'
我今晚實際上正在做一個類似的項目,所以稍后會回來確認網站的正確性(盡管它是有道理的,它是正確的)。
這個鏈接似乎證實了這一點:
順便說一句,除了經常出現的“你不能那樣做”的公認答案之外,堆棧溢出對此還沒有答案,對此我感到有些驚訝。 我不像你在評論中那樣有c++
經驗。 但是我已經使用了c
和 psuedo c#
並且將頭文件包含在全局變量中似乎很簡單,並且不需要回避。 我一直在 Linux bash
使用source config.sh
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.