2

Pythonクラスには、次のメソッドがあります

def foo(self,arg1, arg2):
        global run
        run = False

同じクラスで、私が持っているコンストラクターで

   while run:
            sleep(0.01)
            self.each_frame()  
            self.server.close()
    run = True

このようにクラスメソッドでグローバル変数を微調整しても大丈夫ですか?

4

3 に答える 3

10

これは恐ろしい考えです。インスタンス間で共有される変数が必要な場合は、クラスで定義します。メソッド間で変数を共有する必要がある場合は、オブジェクトでそれらを定義します。

class Foo(object):
    this_is_a_class_variable = 0

    def __init__(self,*args):
        self.this_is_an_object_variable = None
于 2013-11-05T16:14:51.467 に答える
3

globalそうすれば、変数をクラスのスコープだけに定義しません。これをプログラムのグローバル スコープに定義していますが、これは非常に悪い考えです。

クラス間で状態を共有したい場合、次の 2 つの方法があります。

  1. 単一のインスタンス間で状態を共有するだけの場合は、インスタンス変数で問題ありません (例: self.run = False)
  2. クラスのすべてのインスタンス間で状態を共有したい場合は、クラス変数を使用する方法がありself.__class__.run = Falseます。たとえば、クラスの定義で:class A(object): run = False

お役に立てれば!

于 2013-11-05T16:17:33.130 に答える
0

ありがとう!このようにグローバルを定義するのは悪い習慣です。代わりに、私のコンストラクターには

 self.run =true
 while self.run:
         sleep(0.01)
         self.each_frame()  
         self.server.close()

そして、同じクラスのメソッドで

  def foo(self,arg1, arg2):
        self.run = False

正しい?

于 2013-11-05T17:01:09.183 に答える