Я хочу знать, есть ли хороший способ заставить класс наследовать один из двух вариантов. Допустим, у меня есть класс Employee, Devloper и Manager. Разработчик наследует от Employee, довольно просто, менеджер должен наследовать от Employee или Developer. Таким образом, по сути, всегда наследовать от Empolyee и возможно также от разработчика. Есть ли способ сделать это? Или я как-то усложняю это и не должен в первую очередь использовать наследование.
Я заставил его работать по своему собственному методу, но это похоже на хакерский обходной путь. Может быть, это правильный способ сделать это, но я должен как-то ограничить использование.
Это мой класс менеджера с хакерским обходным решением, я в основном проверяю длину переданных аргументов и решаю, принадлежат ли они разработчикуof Employee:
class Manager(Developer or Employee):
def __init__(self, *args, **kwargs):
print(args, kwargs)
if len(args) == 2:
Employee.__init__(self, *args, **kwargs)
elif len(args) == 3:
Developer.__init__(self, *args, **kwargs)
else:
print('error')
Мои классы Employee и Developer следующие:
class Employee:
def __init__(self, first, last):
self.first = first
self.last = last
def fullname(self):
return '{} {}'.format(self.first, self.last)
class Developer(Employee):
def __init__(self, first, last, language):
super().__init__(first, last) #or Employee.__init__()
self.language = language
#Why can i not do something like:
#def __init__(self, language):
# self.language = language
#And because the class extends Employee it would also need it's arguments, them being in order from lowest on inheritance ladder to highest.
def getlang(self):
return self.language
Я также прокомментировал еще один небольшой вопрос здесь, я чувствовал, что если я ограничусь использованием только одного "слой "классов я могу унаследовать. Зачем мне передавать все аргументы в __init__()
и почему Python не может просто выяснить, что ему понадобится для подклассов, и передать их «под капот».
Пожалуйста, дайте мне знать, еслиЯ делаю любые другие опрометчивые вещи. Я только начал в питоне!