наследование класса с ошибкой типа возврата нескольких значений

#python #class #inheritance #constructor

#python #класс #наследование #конструктор

Вопрос:

 class Employees:
    def __init__(self, name, dob, contact, email, address):
        self.name = name
        self.dob = dob
        self.contact = contact
        self.email = email
        self.address = address

    def __str__(self):
        return 'Employees class with basic information '

class Clerks(Employees):
    def __init__(self):
        Employees.__init__(self)
        
    def overtime(self):
        pass
        
class Supervisor(Employees):
    def __init__(self):
        super().__init__()
    
    def get_on_the_piss():
        pass

john = Supervisor('toto','tata', 'titi', 'tete', 'tutu')
TypeError: __init__() takes 1 positional argument but 6 were given
  

И я сделал это

 john = Supervisor()
TypeError: __init__() missing 5 required positional arguments: 'name', 'dob', 'contact', 'email', and 'address'
  

Я попытался сократить вопрос, поэтому не публикую.

 Clerks class return same result too, 
super(Supervisor, self).__init__() also same result
  

Я просматриваю множество решений, но ни одно из них не совпадает, и я не смог найти никакой связанной документации без ключевых слов.

Ответ №1:

Employees принимает 5 аргументов, поэтому вам нужно передать их из Supervisor/Clerks в его базовый класс.
Вы можете использовать *args и **kwargs для сокращения вашего кода или Supervisor/Clerks вам нужно принять по крайней мере те же аргументы, что и Employees .

 class Employees:
    def __init__(self, name, dob, contact, email, address):
        self.name = name
        self.dob = dob
        self.contact = contact
        self.email = email
        self.address = address

    def __str__(self):
        return 'Employees class with basic information '

class Clerks(Employees):
    def __init__(self, name, dob, contact, email, address):
        super(Clerks, self).__init__(name, dob, contact, email, address)
        
    def overtime(self):
        pass
        
class Supervisor(Employees):
    def __init__(self, *args, **kwarg):
        super(Supervisor, self).__init__(*args, **kwarg)
    
    def get_on_the_piss():
        pass


john = Supervisor('toto','tata', 'titi', 'tete', 'tutu')
print(john.name)

clara = Clerks('clara','tata', 'titi', 'tete', 'tutu')
print(clara.name)
  

Вывод:

 toto
clara
  

Ответ №2:

Проблема в том, что класс Supervisor наследует класс employee, которому требуются обязательные аргументы (то есть — name, dob, contact, email, address), которые должны передаваться во время объявления объекта.

ИТАК, вам нужно передать эти аргументы при создании объекта john. точно так же, как:

 john = Supervisor('John', '12/4/2020', '97353', 'emailid@host.com', 'India')
  

То же самое с классом clerk:

 clerk1= Supervisor('Rohan', '12/4/2020', '97353', 'emailid@host.com', 'India')
  

Комментарии:

1. Да, приятель, сначала я все передал правильно, ты можешь проверить последнюю строку первого кода, но мистер Морис указал на проблемы. приветствия