2017-03-28 12 views
0
class Example(tk.Frame): 
    def __init__(self, parent): 
     global p 
     p = 1.1 
     .... 

    def looper(self): 
     if self.keys['Prior']: 
      p = p -.01 
      self.draw() 

このコードは、バックUnboundLocalErrorが付属しています:私はクラスの外のメインルーチンにダウングローバルP/P = 1.1を入れてみましたし、私はまったく同じエラーを得た譲渡Pythonでクラスメソッド内のグローバル変数を更新するには?

前に参照されたローカル変数「P」。どこか私は物事を誤解しているはずです。私はグローバルがプログラム全体を通して意味していると思っていました...それは私がそれを望む方法です...一度それを設定し、それはプログラム全体に行きましょう。私は間違って何をしていますか?

+1

'はGlobal'は(とにかく、それを代わりにインスタンス属性のグローバルである理由のに?) – user2357112

+1

また、気をつけてグローバルに割り当てる必要があるすべての機能に行きますループのための浮動小数点数の使用についてあなたが望まないまたは期待しない結果を得ることは非常に簡単です。おそらく、代わりに、整数または 'decimal.Decimal'のインスタンスを使用する必要があります。 –

+0

OPのコードのための最も速い修正につながる問題ではなく、OPの考え方にあった質問をするという意味で、より重複しているか、場合によってはより重複している:http://stackoverflow.com/questions/25678032/ how-does-pythons-global-keyword-work(特にそこにある回答の高い説明的な質に注意してください)。 –

答えて

1

あなたはメソッドからそれを指している場合は、(推奨されません)クラス定義の前にpを定義することができます。

p = None 

class Example(tk.Frame): 
    def __init__(self, parent): 
     global p 
     p = 1.1 

    def looper(self): 
     global p 
     if ... 

# modifying the global 
p = 5 

ただし、すべてのインスタンスは、あなたがされるまで、意味がありませんそれを修正することを注意してくださいシングルトンパターンまたは他の目的を有する。代わりに、インスタンス変数としてpを持っている必要があります。

class Example(tk.Frame): 
    def __init__(self, parent): 
     self.p = 1.1 

    def looper(self): 
     if self.keys['Prior']: 
      self.p = self.p -.01 
      self.draw() 

# modifying the instance 
my_instance = Example(..) 
my_instance.p = 5 
関連する問題