2012-12-27 73 views
0

我一直在學習Python大約一週左右,當我的代碼變得非常大並且有點混亂之後,我決定把它分解成單獨的類文件等等,但是我遇到了一些問題。在外部類中訪問一個全局變量

我試過谷歌搜索和搜索這裏所以但我找不到我的具體問題,所以原諒我,如果它已被問過。

考慮2個文件。 test.py和testClass.py我在test.py中有一個全局變量,它也將在test.py中設置,但我想在testClass.py的函數中訪問該變量。這裏有一些代碼可以幫助解釋。

test.py應該是這樣的:

import testClass 

dict = {} 
z = 5 

dict['test'] = testClass.testClass(1, 3) 

print dict['test'].sum() 

testClass.py應該是這樣的:

class testClass: 
    def __init__(self, x, y): 
     self.foo = x 
     self.bar = y 

    def sum(self): 
     global z 
     return self.foo + self.bar + z 

目前的解釋器吐出:

NameError: global name 'z' is not defined 

經過重新 - 讀取類和變量範圍的Python引用我認爲我已經釘了它,但顯然不是。

這一切的結果僅僅是能夠通過對象實例字典並運行一系列包含在外部類中的各種檢查函數等。

回答

1

Global對於文件(模塊)是全局的,因此您可能希望將其包含在類中。

+0

我在想,我可能只需將它傳遞給實例,但更加好奇,知道它是否可能按照我原先的想法。 – Urbley

0

我不確定全局是否會工作,如果你在一個方法中聲明它,因爲這在技術上是一個本地命名空間。嘗試把它放在主體和總和之外。

+0

這是一個有點不完整的一個完整的答案,請提供一些代碼或文檔到你在做什麼提示! :) –

0

全局變量需要在任何可能改變它們的函數中定義。

我認爲你需要在test.py定義「Z」作爲一個全球性的:

import testClass 

dict = {} 
global z = 5 

dict['test'] = testClass.testClass(1, 3) 

print dict['test'].sum() 
+0

假答案,全局變量不能這樣工作,它們只能在模塊級別通過變量名訪問。 –