你能帮我找到我的Python代码中的错误吗?

问题描述 投票:0回答:1

这是我的代码。这是 pyton 中多重继承的一个例子。但它显示一个错误。我想创建一个使用单继承和多重继承的程序。为此,创建一个基类 Employee。并从 Employee 创建两个类 Programmer 和 Manager。现在使用多重继承创建一个类 DevManager,它继承自 Programmer 和 Manager。但是当我想要使用正确的参数创建 DevManager 类的对象时,它将显示错误。下面是我的代码,我找不到错误在哪里。

# Define Employee class
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)

# Define Programmer class inherited from Employee class
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)

# Define Manager class inherited from Employee class
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
# Create an instance of DevManager class
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'
python python-3.x multiple-inheritance
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.