2016-01-21 83 views
0

我想弄清楚我有一些問題。 我已經寫小程序,只是這裏的例子(我將實現真正的:)解決方案)Python -local變量''在分配前引用

所以, 我有3個文件 一個首位,而其主要的 測試哪位是測試我跑 CounterTest哪位有高清類內部

一:

def main(): 
    CounterTest=1 
    execfile("c:\\111\\Test.py") 
if __name__ == '__main__': 

    main() 

測試:

from CounterTest import * 
print "THIS IS THE TEST" 
CallClass=CounterTest1() 
CallClass.CounterPlus() 

CounterTest:

class CounterTest1(): 
    def CounterPlus(self): 
     CounterTest +=1 
     print CounterTest 

方案: 我跑 「一」 的執行文件測試(所有這一切都發生在主DEF) 在 「測試」 我打電話類和DEF -in def我們計數+1,這是在「one」文件中定義的。

我越來越

我曾嘗試一切,但沒有奏效

Appriciated 「賦值之前引用局部變量 'CounterTest'」,

感謝

+2

週期性依賴從來都不是一個好主意。另外,'CounterTest'具有本地範圍。 – jepio

+0

那麼我該如何解決這個問題:) – ohadshay

+0

可能的[Python中的UnboundLocalError]重複(http://stackoverflow.com/questions/9264763/unboundlocalerror-in-python) –

回答

0

長期和短期的它是你不能。如果我正確理解你的過程,你是:

1.運行main.py
2.定義變量中的功能所以它的非全局

def main(): 
    CounterTest = 1 # <-- right here 

3.從不同的文件

execfile("...") 

4.其中進口第三個文件執行代碼

from CounterTest import * 

5.試圖修改第一個文件中的全局

... 
    CounterTest += 1 

你不能那樣做。你遠離這三個層面的「不合適」。

  1. main.pyCounterTest是不是一個全球性的,所以這只是內部def main可用的範圍。
  2. 即使它是全球性的,但test.py無法顯式地傳遞它們,也無法訪問main.py的全局變量。
  3. 即使您明確地通過它們(使用execfile(path, globals_dict, locals_dict)),並且它們變成了全局變量test.py,但是CounterTest.py不允許看到test.py的全局變量。

你甚至不能用事情來搗鼓,以使其沒有問題。你需要參數化值,你需要停止使用全局變量。這整個事情應該是:

# counter.py 
class Counter(object): 
    """Counter is knows how to add to itself""" 
    def __init__(self, value=1): 
     self.__value = value 
    def increment(self): 
     self.__value += 1 
    @property 
    def value(self): 
     return self.__value 


# main.py 

import counter 

c = counter.Counter() # initializes at 1 

print(c.value) # 1 
c.increment() 
print(c.value) # 2 

# now SHARE that instance of c!! 
+0

首先非常感謝您的詳細答案..我今天嘗試你的建議並在此更新。 – ohadshay

相關問題