从类内部访问在类外声明的变量

时间:2014-02-22 06:04:41

标签: python

我有一个愚蠢的问题。我想我不理解python中的变量范围。

我有以下代码。

#!/bin/python

class Test:
    def Inc(self):
         Count = Count + 1
         print 'Count = ' + str(Count)

class Test2:
    def Dec(self):
         Count = Count - 1
         print 'Count = ' + str(Count)


def main():
    t = Test()
    t2 = Test2()
    t.Inc()
    t2.Dec()

if  __name__ =='__main__':
    main()

有没有办法以我正在做的方式声明和使用Count?

我上面的方式不起作用,我收到以下错误 -

UnboundLocalError: local variable 'Count' referenced before assignment 

6 个答案:

答案 0 :(得分:2)

您收到错误是因为您在使用Count之前使用Count(在表达式Count + 1中)。

你可能想要像

这样的东西
class Test(object):
    def __init__(self):
        self.count = 0

    def inc(self):
        self.count = self.count + 1 # or self.count += 1
        print 'Count = ' + str(self.count)

def main():
    t = Test()
    t.inc()

if  __name__ =='__main__':
    main()

答案 1 :(得分:0)

Count是一个局部变量,每次调用Inc时都会创建,并在返回时被丢弃。你想要的是一个实例属性。要创建实例属性,需要将其绑定到self,如下所示:

def Inc(self):
    self.Count = self.Count + 1
    print 'Count = ' + str(Count)

但等等! self.Count + 1无法评估,因为self.Count尚不存在!因此,在__init__(您即将定义)中,将其设置为0

class Test:
    def __init__(self):
        self.Count = 0

    def Inc(self):
        self.Count = self.Count + 1
        print 'Count = ' + str(Count)

最后,习惯上用小写启动函数和变量名,为类名留下大写。因此,将所有内容更改为以下内容:

class Test:
    def __init__(self):
        self.count = 0

    def inc(self):
        self.count = self.count + 1
        print 'count = ' + str(count)

def main():
    t = Test()
    t.inc()

要在课堂外访问它,请使用:

>>> t = Test()
>>> t.inc()
>>> print t.count
1

答案 2 :(得分:0)

这种方式怎么样:根据你的问题,不是正确的做法:

Count = 0

class Test:
    def Inc(self):
        Count = globals()['Count']
        Count = Count + 1
        print 'Count = ' + str(Count)

def main():
    t = Test()
    t.Inc()

if  __name__ =='__main__':
    main()

答案 3 :(得分:0)

Count正在为自己添加1。但是,它不知道它是什么,因为你从来没有初始化它。

class Test:
   def __init__(self):
      self._count = 0     #Starting point

   def Inc(self):
       self._count = self._count + 1
       print 'Count = ' + str(self._count)

编辑以匹配评论:

class Test:
   def __init__(self, c):
      self._count = c

   def inc(self):
       self._count = self._count + 1

然后从main()或任何地方:

c = 0
t = Test(c)
t.inc()

答案 4 :(得分:-1)

我建议:

class CallCount(object):
    def __init__(self, start=0):
        self.count=start
    def __call__(self):
        self.count+=1
        return self.count   

然后以这种方式使用它:

>>> c=CallCount()
>>> c()
1
>>> c()
2
>>> c()
3

答案 5 :(得分:-1)

 Count = 0

 class Test:
    def Inc(self):
         global Count
         Count = Count + 1

您必须声明您正在使用全球版本。如果你想要一个实例变量,请执行此操作...

def Inc(self):
     self.count = ...