使用 Super 方法时出现 Name 错误

问题描述

我使用 Super 方法尝试了一个示例代码。 但我误会了。

class person:
    def __init__(self,firstname,lastname):
        self.firstname = firstname
        self.lastname = lastname
    def fullname(self):
        print(firstname,' ',lastname)

class student(person):
    def __init__(self,lastname,grade):
        self.grade = grade
        super().__init__(firstname,lastname) # calling base constructor
    def display_details(self):
        super().fullname() # calling base class method
        print('Grade ',self.grade)
    
std = student('James','Bond','10')
std.display_details()

错误: 打印(名字,'',姓氏) NameError: name 'firstname' 未定义

解决方法

在person类中,方法fullname、firstname和lastname没有定义。您在 init 方法中采用了这些参数,但在 fullname 方法中没有采用。您可以使用在 init 方法中定义的对象变量。

print(self.firstname,' ',self.lastname)