我想知道是否有一种很好的方法可以使类从两个选项中的任何一个继承。假设我有一个Employee,Devloper和Manager类。开发人员从Employee继承,很简单,经理应该从Employee或Developer继承。因此,本质上总是从Empolyee继承,也可能从Developer继承。有没有办法做到这一点?还是我以某种方式使其复杂化,并且一开始就不应该使用继承。
我可以用自己的污垢方法来运行它,但是感觉就像是一个棘手的解决方法。也许这是正确的方法,但是我应该以某种方式限制使用。
这是我的经理类,具有变通的解决方法,我基本上是在检查传递的参数的长度,并确定它们是否属于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不仅可以弄清楚子类需要什么其他参数,还可以将它们传递给“幕后”呢?
请告知我是否还有其他不良建议。我刚开始使用python!
答案 0 :(得分:2)
当我遇到这样的问题时,我使用工厂函数:
class Employee:
.....
class Developer(Employee):
......
class DeveloperManager(Developer):
def __int__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class EmployeeManager(Employee):
def __int__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Factory to create a manager class based on the args given
def Manager(*args, **kwargs):
# if language argument is passed return a developer manager
if len(args) == 3 or len(args) == 2 and 'language' in kwargs:
return DeveloperManager(*args, **kwargs)
elif len(args) == 2:
return EmployeeManager(*args, **kwargs)
else:
print('error')
答案 1 :(得分:0)
否,无法更改类的基类。相反,您可以创建两个单独的类:class Manager(Employee)
和class DeveloperManager(Developer, Manager)
。