NameError:全局名称'self'未定义 - 类
我正在尝试学习类,但有些地方让我感到困惑,我遇到了这个问题:
"NameError: global name 'self' is not defined"
每个类的字段都出现了同样的问题。你能帮我找出我哪里做错了吗?谢谢!
代码:
class Assignment:
def __init__(self, name, discription, deadline, grade, studentID):
self.name = name
self.studentID = studentID
self.description = discription
self.deadline = deadline
self.grade = grade
def __str__(self):
return "studentID:" + self.studentID + "assignment name:" + self.name +" description:" + self.description + " deadline:" + self.deadline + " grade:" + self.grade
def validation(self):
errors= []
if self.studendID == "":
errors.append("No existing student ID.")
if self.description == "":
errors.append("No existing description.")
if self.deadline == "":
errors.append("No existing deadline.")
if self.deadline == "":
errors.append("No existing deadline.")
return errors
@staticmethod
def dummyAssignments():
ret = []
for studentID in range(100, 121):
print "sda"
a = Assignment(self, name, discription, deadline, grade, studentID)
ret.append(a)
return ret
def testAssigment():
a = Assignment("","","","","")
print a
testAssigment()
print Assignment.dummyAssignments()
4 个回答
2
dummyAssignments这个静态方法只包含学生的ID,没有其他任何信息。
试着给每个字段设置一些默认值:
class Assignment:
def __init__(self, name='', discription='', deadline='', grade='', studentID =''):
self.name = name
self.studentID = studentID
self.description = discription
self.deadline = deadline
self.grade = grade
def __str__(self):
return "studentID:" + self.studentID + "assignment name:" + self.name +" description:" + self.description + " deadline:" + self.deadline + " grade:" + self.grade
def validation(self):
errors= []
if self.studendID == "":
errors.append("No existing student ID.")
if self.description == "":
errors.append("No existing description.")
if self.deadline == "":
errors.append("No existing deadline.")
if self.deadline == "":
errors.append("No existing deadline.")
return errors
@staticmethod
def dummyAssignments():
ret = []
for studentID in range(100, 121):
print "sda"
a = Assignment(studentID=studentID)
ret.append(a)
return ret
def testAssigment():
a = Assignment("","","","","")
print a
testAssigment()
print Assignment.dummyAssignments()
6
问题出在这里:
a = Assignment(self, name, discription, deadline, grade, studentID)
这是在一个 @staticmethod
里面,所以 self
是没有定义的。
其实,仔细想想,除了 studentID
之外,其他的值都是没有定义的。
3
在创建你自己的类的时候,不需要传递 self
这个参数。
Assignment(self, name, discription, deadline, grade, studentID)
应该是
Assignment(name, discription, deadline, grade, studentID)
这个错误告诉你,你正在尝试使用一个叫 self
的变量,但这个变量在你当前的代码中没有被定义,无论是在本地还是全局范围内。