#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. Да, приятель, сначала я все передал правильно, ты можешь проверить последнюю строку первого кода, но мистер Морис указал на проблемы. приветствия