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只在类的范围内定义 var。您将其定义为程序的全局范围,这是一个非常糟糕的主意

如果你想在你的类之间共享状态,你有两种方法:

  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 回答