首页 > 解决方案 > 继承一个函数后如何给它更多参数

问题描述

student我为我的班级继承了一个班级masters_student,并且所有功能都按预期工作,但我想给我的masters_student班级另一个名为Age.

我怎么能那样做?

class masters_student(student , age):
    self.age = age
        def qualify(self):
            if self.Gpa > 3.0 :
                print("You qualify for the masters Programme")
            else:
                print("you dont qualify for Masters programme")

然后它显示一个错误

class student:
    def __init__(self, name, major, Gpa, loan):
        self.name = name
        self.major = major
        self.Gpa = Gpa
        self.loan = loan

    def On_honour_roll(self):
        if self.Gpa >= 3.5:
            return True
        else:
            return False


class masters_student(student):
    def qualify(self):
        if self.Gpa > 3.0 :
            print("You qualify for the masters Programme")
        else:
             print("you dont qualify for Masters programme")

标签: pythoninheritanceparameters

解决方案


首先,我们必须正确使用我们的术语。我看不到您将继承的现有函数放在哪里,然后重新定义它以具有其他参数。当你编码时:

class masters_student(student , age):

您正在指定多重继承,也就是说,您说 classmasters_student继承自 classstudent和 class age。但是在下一行你编码:

    self.age = age

这没有太大意义。

似乎您正在尝试做的是向您的新类添加一个名为masters_student的附加数据属性age。我什至无法确定这一点,因为我从未在您的问题中看到任何引用的代码age;我原以为它将用于 method qualify。但假设这是您的意图,有几种方法可以做到这一点,具体取决于您运行的是 Python 3 还是 Python 2。适用于 Python 2 或 Python 3 的最简单方法是:

class masters_student(student):
    def __init__(self, name, major, Gpa, loan, age):
        student.__init__(self, name, major, Gpa, loan) # initialize the base class
        self.age = age

如果您正在运行 Python 3,您还可以编写以下代码:

class masters_student(student):
    def __init__(self, name, major, Gpa, loan, age):
        super().__init__(name, major, Gpa, loan) # initialize the base class
        self.age = age

如果您正在运行 Python 2(或 Python 3),您还可以编写代码:

class masters_student(student):
    def __init__(self, name, major, Gpa, loan, age):
        super(masters_student, self).__init__(name, major, Gpa, loan) # initialize the base class
        self.age = age

但是,在这种情况下,您必须确保您的基类student继承自 class object

class student(object):

当你super()用来初始化基类时,基类也必须super()用来初始化它们的基类和兄弟类。


推荐阅读