我有一个愚蠢的问题。我想我不理解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
答案 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 = ...