这是我的代码。这是 pyton 中多重继承的一个例子。但它显示一个错误。我想创建一个使用单继承和多重继承的程序。为此,创建一个基类 Employee。并从 Employee 创建两个类 Programmer 和 Manager。现在使用多重继承创建一个类 DevManager,它继承自 Programmer 和 Manager。但是当我想要使用正确的参数创建 DevManager 类的对象时,它将显示错误。下面是我的代码,我找不到错误在哪里。
class Employee:
def __init__(self, id, ename):
self.id = id
self.ename = ename
def showInfo(self):
print("ID=", self.id, "Name of employee=", self.ename)
class Programmer(Employee):
def __init__(self, id, ename, language):
super().__init__(id, ename)
self.language = language
def showInfo(self):
super().showInfo()
print("Development Language=", self.language)
class Manager(Employee):
def __init__(self, id, ename, department):
super().__init__(id, ename)
self.department = department
def showInfo(self):
super().showInfo()
print("Department=", self.department)
# Define Development Manager class using Multiple inheritances
class DevManager(Programmer, Manager):
def __init__(self, id, ename, language, department):
Programmer.__init__(self, id, ename, language)
Manager.__init__(self, id, ename, department)
def showInfo(self):
super().showInfo()
# Main
obj = DevManager("A101", "Rajib Menon", "Python", "Engineering")
obj.showInfo()
在这个程序中,它不会创建Programmer类的对象。以下错误向我显示。
Traceback (most recent call last):
File "C:\Users\Home\.spyder-py3\multiple.py", line 41, in <module>
obj = DevManager("A101", "Rajib Menon", "Python", "Engineering")
File "C:\Users\Home\.spyder-py3\multiple.py", line 33, in __init__
Programmer.__init__(self, id, ename, language)
File "C:\Users\Home\.spyder-py3\multiple.py", line 13, in __init__
super().__init__(id, ename)
TypeError: __init__() missing 1 required positional argument: 'department'
class Employee:
def __init__(self, id, ename):
self.id = id
self.ename = ename
def showInfo(self):
print("ID=", self.id, "Name of employee=", self.ename)
class Programmer(Employee):
def __init__(self, id, ename, language):
super().__init__(id, ename)
self.language = language
def showInfo(self):
super().showInfo()
print("Development Language=", self.language)
class Manager(Employee):
def __init__(self, id, ename, department):
super().__init__(id, ename)
self.department = department
def showInfo(self):
super().showInfo()
print("Department=", self.department)
class DevManager:
def __init__(self, id, ename, language, department):
self.programmer = Programmer(id, ename, language)
self.manager = Manager(id, ename, department)
def showInfo(self):
self.programmer.showInfo()
self.manager.showInfo()
# Main
obj = DevManager("A101", "Rajib Menon", "Python", "Engineering")
obj.showInfo()
在这个修改后的示例中,DevManager 类通过创建 Programmer 和 Manager 类的实例来使用组合。这种方法避免了多重继承的复杂性和钻石问题(导致方法解析顺序 (MRO) 的逻辑问题)。
打印:
ID= A101 Name of employee= Rajib Menon
Development Language= Python
ID= A101 Name of employee= Rajib Menon
Department= Engineering