簡體   English   中英

如何在文件之間共享靜態類變量?

[英]How to share static class variables between files?

我試圖在兩個模塊之間通過靜態類共享數據。 本來應該很簡單,但是事實證明我遇到了一些陷阱。 這是代碼。

testa.py

class Tc:
    a = 0


if __name__ == "__main__":
    import testb
    print(Tc.a)

testb.py

import testa

print(testa.Tc.a)
testa.Tc.a = 1

print(testa.Tc.a)

運行命令

python testa.py

預期的輸出是

0
1
1

但我越來越

0
1
0

這是怎么回事?

  • 執行testa並定義Tc類並導入testb
  • testb進口testa
  • 由於從未導入testa因此將執行它並創建一個新的Tc
  • testb繼續打印0並為導入的testa遞增testa.Tc
  • 運行中的testa繼續打印其Tc.a計數器的值為零。

運行文件時,其模塊名稱為__main__ (甚至在testa內部有條件地檢查它!),而在導入期間,名稱始終為模塊的名稱。 因此重復。 如果要避免這種情況,您應該真正使用3個單獨的文件,一個文件運行並導入testa ,另一個文件testb導入testa

當您的代碼import testb ,它在內存中有一個class Tc ,但是尚未完成模塊的創建。 然后, testb再次導入testa ,由於尚未完成創建,因此尚未進行緩存,因此再次導入它,並正在創建另一個Tc

TL; DR:不要進行循環進口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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