После наследования функции, как дать ей больше параметров - PullRequest
1 голос
/ 06 октября 2019

Я унаследовал класс 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")

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Во-первых, мы должны получить правильную терминологию. Я не вижу, где вы берете существующую функцию, которую вы наследуете, а затем переопределяете ее, чтобы иметь дополнительные параметры. Когда вы кодируете:

class masters_student(student , age):

Вы указываете множественное наследование, то есть вы говорите, что класс masters_student наследуется как от класса student, так и от класса age. Но затем на следующей строке вы набираете:

    self.age = age

, что не имеет особого смысла.

Кажется, что вы пытаетесь сделать, это добавить в свой новый класс masters_student, дополнительный атрибут данных с именем age. Я даже не могу быть уверен в этом, потому что я никогда не вижу в вашем вопросе кода, который ссылается на age;Я бы подумал, что это будет использовано в методе 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 в этом случае, наследуется от класса object:

class student(object):

Когда вы используете super() для инициализации базовых классов, базовые классы также должны использоватьsuper() для инициализации базовых классов и классов братьев и сестер.

0 голосов
/ 06 октября 2019

Вот некоторая документация по [https://rhettinger.wordpress.com/2011/05/26/super-considered-super/][super].

Вы должны указать python, как создать экземпляр класса ваших детей после родительского.

class master_student(student):

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

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...