gpt4 book ai didi

python - 有没有一种好方法让一个类继承两个类之一

转载 作者:行者123 更新时间:2023-12-01 00:27:23 25 4
gpt4 key购买 nike

我想知道是否有一个好的方法可以让类继承两个选项中的任何一个。假设我有一个 Employee、Devloper 和 Manager 类。开发人员继承自员工,非常简单,经理应该继承自员工或开发人员。因此本质上总是从 Empolyee 继承,也可能从 Developer 继承。有没有办法做到这一点?或者我是否以某种方式使其复杂化,并且一开始就不应该使用继承。

我让它以我自己的肮脏方法工作,但感觉像是一个黑客的解决方法。也许这是正确的方法,但我应该以某种方式限制使用。

这是我的经理类,具有 hacky 解决方法,我基本上是检查传递的参数的长度并确定它们是否属于 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')

我的员工和开发人员类(class)如下:

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!

最佳答案

当我遇到这样的问题时,我使用工厂函数:

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')

关于python - 有没有一种好方法让一个类继承两个类之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58458889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com