我有一个类Player,我正在尝试编辑其中一个属性。但是,我继续在我的方法中的for循环中出现错误:
class Player:
#bunch of attributes
X = 1
Y = 1
def foo(self, bar):
for i in [X,Y]:
self.i += item.i
但是,出现此错误:
AttributeError: Player instance has no attribute 'i'
导致此错误的原因是什么?
答案 0 :(得分:2)
def choose_sets(mylist,length):
mylen = len(mylist)
if length == 1:
return [[i] for i in mylist]
if length > mylen:
return []
ToRet = []
for k in xrange(mylen):
if mylen - k + 1> length :
for j in choose_sets(mylist[k+1:],length-1):
New = [mylist[k]]
New.extend(j)
ToRet.append(New)
return ToRet
print choose_sets([1,2,3,4,5],3)
尝试访问您班级的self.i
属性,无论i
包含哪个值,并且由于您的班级没有此类属性,您会收到错误,如果您想要通过您需要使用getattr
的某个变量的值来访问该属性,并执行类似这样的操作
i
答案 1 :(得分:1)
变量i
是一个一次性变量,它存在于函数的局部范围内,并在每次迭代中重新分配。如果要在类范围中更改此类的多个变量,最好使用列表并更改函数中的列表项:
>>> class Player:
... def __init__(self):
... self.Lst = [1,1]
... def foo(self, bar):
... self.Lst = [i+bar for i in self.Lst]
...
>>>
>>> P = Player()
>>> P.Lst
[1, 1]
>>> P.foo(2)
>>> P.Lst
[3, 3]