我已阅读StackQ1和stackQ2但无法解决我的错误。 下面给出的程序正在给出
UnboundLocalError:在赋值
之前引用的局部变量'k'
我已将变量k
设为global
,但它无效。
class myClass:
global k
k=0
def data(self):
def data2(k):
for j in range(5):
k=k+1
return k
for i in range(5):
k=k+1
data2(k)
Obj = myClass()
print(Obj.data())
我也试过
k=0
class myClass:
# global k
def data(self):
def data2(k):
for j in range(5):
k=k+1
return k
for i in range(5):
k=k+1
data2(k)
Obj = myClass()
print(Obj.data())
但不行。
答案 0 :(得分:0)
class My_Class(object):
def __init__(self, **kwargs):
super(My_Class, self).__init__()
self.k = "hello"
def data(self, *args):
print "call data"
return self.k
my_class = My_Class()
print my_class.data()
答案 1 :(得分:0)
解决问题并将其发布给新手
class myClass:
k=0
def data(self):
def data2(k):
for j in range(5):
self.k=self.k+1
return self.k
for i in range(5):
self.k=self.k+1
data2(self.k)
Obj = myClass()
print(Obj.data())
归功于@Moses Koledoye和@ Abhishek
答案 2 :(得分:0)
对于我的解释,我重新注释并注释您的代码:
class myClass: # <- [1]
global k # <- [2]
k = 0 # <- [3]
def data(self):
def data2(k): # <- [4]
for j in range(5):
k = k + 1
return k # <- [5]
for i in range(5):
k = k + 1 # <- [6]
data2(k)
Obj = myClass()
print(Obj.data())
[1]类名应根据PEP8推荐使用CamelCase。请注意,您的类应继承自object
(在Python 2.7中)以使用(现代)新式类。
[2]全局变量k
未在模块级别定义。你不能在Python中声明一个变量,你必须定义它。由于k
看起来像一个整数,你可以写:
k = 0
[3]在这里,您定义了一个类变量。
Python使用magic methods
构造和初始化一个类实例。
您应该使用__init__
方法初始化您的课程,如下所示:
class MyClass(object):
def __init__(self):
self.k = 0
[4]在这里,您可以在data
方法中定义一个函数。你想让我做什么?一种新方法?
class MyClass(object):
def data(self):
def data2(k): # <- [4]
pass
[5]我认为你过早地回归:循环在第一次迭代时结束。记住你的缩进:
def data2(k):
for j in range(5):
k = k + 1
return k # <- [5]
[6] k
函数中未定义局部变量data
。
如果要使用模块级变量(并对其进行修改),则必须使用global
关键字。
class MyClass(object):
def data(self):
global k
for i in range(5):
k = k + 1 # <- [6]
data2(k)
让我们从tutorial开始。