NameError:全局名称'self'未定义 - 类

4 投票
4 回答
6061 浏览
提问于 2025-04-17 06:14

我正在尝试学习类,但有些地方让我感到困惑,我遇到了这个问题:

"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 的变量,但这个变量在你当前的代码中没有被定义,无论是在本地还是全局范围内。

撰写回答