簡體   English   中英

繼承其他 file.py 全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM