変数をグローバルにし、class.var 機能を使用してクラス間で変数を共有することに関するいくつかの回答を読みましたが、私の例ではそれらのどれも機能していないようです。
app.py
複数のクラスをインスタンス化するファイルは 1 つだけです。ただし、グローバルにしたい変数はクラスではなく、メイン スクリプトにあるだけです。次に、いずれかのクラス内にある関数にグローバル globvar を入力すると、次のエラーが表示されます。
NameError: global name 'globvar' is not defined.
この変数を参照によってクラスに渡すにはどうすればよいですか (私は知っていますが、pythonic 言語ではありません)、クラスはそれを変更できますが、他のクラスはそれにアクセスできます。
インデントなしでファイルの下部を編集します。
app = MyApp(False)
logFile = open('C:/Python26/temp/test.txt', 'w')
globvar = 7
ser = serial.Serial('com5',115200,timeout=0.01)
app.MainLoop()
それから私の最初のクラスで私は持っています:
class MyApp(wx.App):
def MainLoop(self):
line = ser.readline()
if len(line) > 2:
global globvar
globvar = line
そして、2番目のクラスでは次のことを行います。
class MyFrame(wx.Frame):
def OnMove(self, event):
pos = event.GetPosition()
global globvar
self.posCtrl.SetValue("%s, %s" % (globvar, pos.y))
これらはすべて同じファイルにあります。エラーテキストは次のとおりです。
Traceback (most recent call last):
File "C:\Program Files (x86)\wxPython2.8 Docs and Demos\samples\mainloop\mainloop.py", line 66, in OnMove
self.posCtrl.SetValue("%s, %s" % (globvar, pos.y))
NameError: global name 'globvar' is not defined