AttributeError:<class>实例没有属性

时间:2016-01-07 19:22:02

标签: python python-2.7

我有一个类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'

导致此错误的原因是什么?

2 个答案:

答案 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]