所以,我正在阅读使用Python编程简介并为我自己的启发做练习。我正在学习自定义类并进入它所声明的部分:"程序应该使用一个名为Quizzes的类,它有一个实例变量来保存六个等级的列表......"所以我尝试了以下内容:
class Quizzes:
def __init__(self, grade1=0):
self._grade1 = grade1
def setGrade1(self, grade1):
self._grade1 = grade1
def getGrade1(self):
return self._grade1
def grades(self):
return []
def gradeInsert(self, a=grades()):
a.append(self._grade1)
在这种情况下,我得到" TypeError:grades()缺少1个必需的位置参数:' self'。
我也尝试过:
def __init__(self, grade1=0, grades=[]):
self._grade1 = grade1
self._grades = grades
def setGrade1(self):
self._grade1 = grade1
def setGrades(self):
self._grades = [self.getGrade1()]
def getGrades(self):
return self._grades
但我得到一个空白[]。我对_ init _中的成绩= []所做的任何修改都反映在我的getGrades调用中。那么我如何让setGrades实际设置?还是我完全不合适?
答案 0 :(得分:4)
应在__init__
class Quizzes:
def __init__(self):
self._grades = [] # Here, we initialize the list
def grades(self):
return self._grades # We can return the instance variable here
def gradeInsert(self, a): # No reason for a default argument here
self._grades.append(a) # Add the value to the list
答案 1 :(得分:2)
在您的第一个示例中,您尝试调用grades()
,它是Quizzes
类的成员函数。成员函数期望实例作为第一个参数,在点(the_instance.grades()
)之前或作为显式参数(不太常见)作为显式参数(grades(the_instance)
)。你既不提供,也不提供Python抱怨。
在你的第二个例子中,在定义类之后你不清楚你实际做了什么。
一般来说,这两个课程与练习没什么关系,可以通过以下方式解决:
class quizzes(object):
def __init__(self, grades = None):
if grades is None:
self.grades = [0]*6
else:
self.grades = grades[:6]
BTW:不建议使用可变对象作为默认参数,因为此对象在所有调用之间共享。