Python 2.7 __init __()只需要2个参数(给定3个)

时间:2014-10-18 07:39:51

标签: python inheritance super

我有这些课程。 Person是父类,Student是子类:

class Person(object):
    def __init__(self, name):
        self.name = name

class Student(Person):
    def __init__(self, avr, name):
        self.avr = avr
        super(Student, self).__init__(self, name)

当我尝试创建Student的实例时,我收到此错误:

__init__() takes exactly 2 arguments (3 given)

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:5)

如果您使用超级,则不要将self传递给目标方法。它是隐式传递的。

super(Student, self).__init__(name)

总共2个论点(自我,名字)。当你通过self时,总共有3个(自我,自我,名字)。

答案 1 :(得分:-1)

您可以使用

super(Student, self).__init__(name)

其中self已传递给 init 方法,因此您无需在__init__方法中再次将其写出来。 但是如果你使用

super(Student, Student).__init__(self, name)

super(Student, self.__class__).__init__(self, name)

你必须用__init__方法写下自己。