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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2.7 __init __()只需要2个参数(给定3个)相关的知识,希望对你有一定的参考价值。

我有这些课程。 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)

我的代码出了什么问题?

答案

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

super(Student, self).__init__(name)

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

另一答案

您可以使用

super(Student, self).__init__(name)

self已经传递给init方法,所以你不需要在__init__方法中再次写出来。但如果你使用

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

要么

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

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

以上是关于Python 2.7 __init __()只需要2个参数(给定3个)的主要内容,如果未能解决你的问题,请参考以下文章

Python模块适用于2.7但不适用于3.5 [重复]

python 2.7中的超级[重复]

python继承

01背包问题python 2.7实现

Python 2.7 - 这是对 __metaclass__ 的有效使用吗? [关闭]

Python继承2.7构造函数不起作用