TypeError:unbound方法__init __()必须使用payroll实例作为第一个参数调用(改为使用int实例)

问题描述 投票:-1回答:2
class employee(object):
    def __init__(self,employeenumber,name):
        self.employeenumber=employeenumber
        self.name=name
    def printdata(self):
        print self.employeenumber
        print self.name
class payroll(employee):
    def __init__(self,employeenumber,name,salary):
        employee. __init__(employeenumber,name)
        self.salary=salary
    def outdata(self):
        self.printdata()
        print self.salary
class leave(payroll):
    def __init__(self,employeenumber,name,salary,nodays):
        payroll. __init__(employeenumber,name,salary)
        self.nodays=nodays
    def showdata(self):
        self.outdata()
        print self.nodays

emp1=leave(3,"sam",5000,8)
emp1.showdata()

尝试使用“超级”,但得到了同样的错误:

Traceback (most recent call last):
  File "C:/Python27/limb.py", line 23, in <module>
    emp1=leave(3,"sam",5000,8)
  File "C:/Python27/limb.py", line 17, in __init__
    payroll. __init__(employeenumber,name,salary)
TypeError: unbound method __init__() must be called with payroll instance as first argument (got int instance instead)

如果有人可以建议用super编写这段代码,那将是很好的,这样我就可以理解它的实际功能。

python python-2.7 typeerror superclass
2个回答
2
投票

要直接在类上调用重写的__init__方法,您需要显式传入self

class leave(payroll):
    def __init__(self, employeenumber, name, salary, nodays):
        payroll.__init__(self, employeenumber, name, salary)
        self.nodays=nodays

因为在类上查找的方法没有绑定到实例(因为Python在这种情况下无法知道实例是什么)。因此,您将employeenumber作为第一个参数传递,而不是用作该方法的self参数的有效类型的对象。

或者,使用super() function,它生成一个绑定方法(所以一个方法对象,其中self已绑定到一个实例):

class leave(payroll):
    def __init__(self, employeenumber, name, salary, nodays):
        super(leave, self).__init__(employeenumber, name, salary)
        self.nodays=nodays

0
投票

你应该使用这样的类:

class employee(Thread):

而不是这个:

class employee(object):
© www.soinside.com 2019 - 2024. All rights reserved.