这是我的代码:如何修复错误:“AttributeError:'str'对象没有属性'make_lab'”?
class Student():
exam_max=None
lab_max=None
lab_num=None
k=None
students=[]
labs=None
exam=None
def __init__(self, name=None, conf=None):
keys = conf.keys()
self.name=name
self.students.append({"name":self.name, "labs":[], "exam":0})
if 'exam_max' in keys:
self.exam_max = conf['exam_max']
if 'lab_max' in keys:
self.lab_max = conf['lab_max']
if 'lab_num' in keys:
self.lab_num = conf['lab_num']
if 'k' in keys:
self.k = conf['k']
def make_lab(self, m=None, n=None):
self.m = m
self.n = n
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
if len(i.get("labs"))<self.lab_num:
while len(i.get("labs"))<self.lab_num:
i.get("labs").append(0)
if self.n==None:
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
for b in range(len(i.get("labs"))):
if i.get("labs")[b]==0:
if self.m>=self.lab_max:
i.get("labs")[b]=self.lab_max
break
else:
i.get("labs")[b]=self.m
break
elif self.n>=0 and self.n<=self.lab_num-1:
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
for b in range(len(i.get("labs"))):
if b==self.n:
if self.m>=self.lab_max:
i.get("labs")[b]=self.lab_max
else:
i.get("labs")[b]=self.m
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
labs=i.get("labs")
exam=i.get("exam")
return "labs: {}, exam: {}".format(" ".join(str(v) for v in labs), str(exam))
def make_exam(self, m=0):
self.m_e=m
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
if self.m_e>=self.exam_max:
i["exam"]=self.exam_max
else:
i["exam"]=self.m_e
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
labs=i.get("labs")
exam=i.get("exam")
return "labs: {}, exam: {}".format(" ".join(str(v) for v in labs), str(exam))
def is_certified(self):
for i in self.students:
for k,v in i.iteritems():
if v == self.name:
rez=sum(i.get("labs"))+i.get("exam")
return (rez, (rez/100)>=self.k,)
return None
如果方法调用是在一个做,所有的工作:
>>> oleg.make_lab(1)
'labs: 1 0 0 0 0 0 0 0 0 0, exam: 0'
但是:
>>> oleg.make_lab(1).make_lab(8,0).make_lab(1).make_lab(10,7).make_lab(4,1).make_lab(5).make_lab(6.5).make_exam(32)
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
oleg.make_lab(1).make_lab(8,0).make_lab(1).make_lab(10,7).make_lab(4,1).make_lab(5).make_lab(6.5).make_exam(32)
AttributeError: 'str' object has no attribute 'make_lab'
'make_lab'返回这显然不具有'make_lab'方法_String_。你可能需要从函数中返回'self'。 – ForceBru