TypeError: 描述符 '__init__' 需要一个 'super' 对象但收到了一个 'str'

新手上路,请多包涵

使用 Python 3.X 作为解释器。我刚刚继承了 Employee 类,其中两个派生类为 DeveloperManager

下面的代码抛出类型错误: '__init__' requires a 'super' object but received a 'str'

我不明白为什么会这样,我还没有发现该程序有任何问题。

 class Employee:
    raise_amount=1.05
    emp_count=0
    def __init__(self,first_name,last_name, amount):
        self.first_name=first_name
        self.last_name=last_name
        self.amount=amount
        self.email_id="{0}.{1}@{1}.com" .format(first_name,last_name)
        Employee.emp_count +=1

    def fullname(self):
        print ("%s %s"%(self.first_name,self.last_name))

    def print1(self):
        print (self.email)
        print ("Total no of Employee are :%d" %(Employee.emp_count))

    def raise_amount(self):
        self.amount *=self.raise_amount
        return self.amount

class Developer(Employee):
    raise_amount = 1.10
    def __init__(self,f,l,a,prog):
        super.__init__(f,l,a)
        self.programming=prog

class Manager(Employee):
    def __init__(self,f,l,a,emp=None):
        super.__init__(f,l,a)
        if emp is None:
            self.my_employee=[]
        else:
            self.my_employee=emp

    def add_employee(self,emp):
        if emp in self.my_employee:
            print("employee is already exist")
        else:
            self.my_employee.append(emp)

    def remove_employee(self,emp):
        if emp in self.my_employee:
            self.my_employee.remove(emp)

    def print_employee(self):
        for emp in self.my_employee:
            print (emp.fullnamme())

dev1=Developer("subhendu","panda",500000,"Python")
dev1.raise_amount()
dev2=Developer('Aditya','bishoyi',5688989,'java')
dev2.fullname()
dev1.fullname()
emp1=Employee("tonu","trip",30000)
emp1.raise_amount()
emp1.fullname()
mgr1=Manager("Biplab","choudhury",5000000)
mgr1.fullname()
mgr1.add_employee(dev1)
mgr1.add_employee(emp1)
mgr1.add_employee(dev2)
mgr1.print_employee()
mgr1.remove_employee(dev1)
mgr1.print_employee()

错误跟踪:

 Traceback (most recent call last):
File "C:/Users/Subhendu/PycharmProjects/hello/inheritance.py", line 56, in
<module> dev1=Developer("subhendu","panda",500000,"Python")
File "C:/Users/Subhendu/PycharmProjects/hello/inheritance.py", line 27, in
init super.__init__(f,l,a) TypeError: descriptor 'init' requires a 'super'
object but received a 'str'

原文由 SUBHENDU PANDA 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您的 super 调用给出了 Developer 类中的错误应该是:

 super(Developer, self).__init__(f, l, a)

Manager 类中:

 super(Manager, self).__init__(f, l, a)

您还有其他问题,例如,在 Employee 中,您有两个名为 raise_amount 的属性,一个是 —415e01dd927270a33b391bdfb2092daf6— ,一个是 float 一个是方法(函数一个是方法)。这是不允许的, float 优先,所以 dev1.raise_amount() 失败。

print_employee() 你拼错了 emp.fullname

原文由 cdarke 发布,翻译遵循 CC BY-SA 3.0 许可协议

将所有 super.__init__(...) 调用更改为 super().__init__(...) 。问题是缺少一对括号 ()

此处 的官方 Python 3.3 参考资料来看, super 实际上是一个带有签名 super([type[, object-or-type]]) 的内置函数。

原文由 NatKSS 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题