Детали наследования Python OOP
Недавно учу ООП, прошу прощения.
Наивный вопрос. Есть супер-класс, скажем:
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
Пишем дочерние классы Man(Human), Woman(Human).
Я хочу сохранить все, что уже определено в Human.__init__(),
но добавить, скажем для Man self.job, для Woman self.beauty
Так, разумеется, не работает:
class Man(Human):
def __init__(self, name, age, job):
super().__init__(self, name, age)
self.job = job
Я понимаю, что для 2-3 свойств все можно переписать. Ну а если повторяется 10 свойств супер-класса, и только одно новое?
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
Почему "разумеется" не работает? Очень даже работает.
class Man(Human):
def __init__(self, name, age, job):
super().__init__(name, age)
self.job = job
Просто self не надо передавать при вызове.
Автор решения: S. Nick
→ Ссылка
Как вариант:
class Human:
def __init__(self, *args):
super().__init__()
#print(f'{args}') #
self.name = args[0]
self.age = args[1]
class Man(Human):
def __init__(self, job, *args):
super(Man, self).__init__(*args)
self.job = job
class Woman(Human):
def __init__(self, beauty, *args):
super(Woman, self).__init__(*args)
self.beauty = beauty
man = Man('пекарь', 'Вася', 22)
print(f'\nman = {man.name}, {man.age}, {man.job}')
woman = Woman('beauty 1', 'Маша', 20)
print(f'\nwoman = {woman.name}, {woman.age}, {woman.beauty}')