super().__ init __()失败并出现错误

时间:2017-04-11 12:09:59

标签: python-2.7

下面是我的Python继承示例代码。

class db_Conn:
    hike = 1.04

    def __init__(self,first,last,pay):
            self.first = first
            self.last = last
            self.pay = pay
            self.email = first + '.' + last + '@ibm.com'


    def full_name(self):
            return'{} {}'. format( self.first, self.last)

    def emp_raise(self):
            self.pay = int(self.pay * self.hike)


emp1 = db_Conn('amitesh','sahay',50000)
emp2 = db_Conn('amit','sharma',60000)

class Dev(db_Conn):
    def __init__(self,first,last,pay,prog): 
        super().__init__(first,last,pay)
        self.prog = prog

dev1 = Dev('amitesh','sahay',50000, 'python')
dev2 = Dev('amit','sharma',60000,'scala')

print (dev1.prog)
print(dev2.email)

我收到以下错误::

Traceback (most recent call last):
dev1 = Dev('amitesh','sahay',50000, 'python')
    super().__init__(first,last,pay)
TypeError: super() takes at least 1 argument (0 given)

我无法弄清楚我在做什么错。请帮帮...... !!!

2 个答案:

答案 0 :(得分:1)

documentation for super()表明它至少需要一个参数:要开始搜索的类。这在Python 3中是可选的,但是当你使用2.7时,你需要:

        super(Dev).__init__(first,last,pay)

它还说:

  

注意: super()仅适用于new-style class es。

新式课程继承自object,而你的课程并非如此。您想要声明db_Conn课程:

class db_Conn(object):

答案 1 :(得分:0)

要在Python 2.7中启用继承,需要通过传递两个参数来建立父类和子类之间的连接。这些参数是对子类和self对象的引用。因此,超级函数应写为:

super(Dev, self).__init__(first,last,pay) 

对于python 2.7中的继承,您的父类应该从object继承。