2014-10-18 83 views
0

我有这些类。 人是父类和学生是子类:python 2.7 __init __()只需要2个参数(3给出)

#Person class 
class person(object): 
    def __init__(self, name): 
     self.name = name 
    def pr(self): 
     print "I'm " + self.name 

#Student class 
from personClass import person 
class student(person): 
    def __init__(self, avr, name): 
     self.avr = avr 
     super(student, self).__init__(self, name) 
    def pr(self): 
     super(student, self).pr(self) 
     print "My avrage is " + str(self.avr) + "\n" 

我得到第17行这个错误,当我试图让我的类的实例初始化()到底需要2个参数(3给出)和 人。 init(self,name)正常工作。 我的代码有什么问题,如何在python 2.7中使用super?

+0

你是如何创建一个对象? – thefourtheye 2014-10-18 07:41:30

回答

5

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

super(student, self).__init__(name) 

这是2个参数总数(自我,名字)。当你通过self,这是3总(自我,自我,名字)。

+0

是的。自我出现在方法参数中,但在调用方法时实际上并未放入。 – user1269942 2014-10-18 07:48:52

0

您可以使用

super(Student, self).__init__(name) 

在自我已经传给初始化方法,所以你不需要它初始化方法再次写出来的。 但是如果你使用

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

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

,你必须写下自己在初始化方法。

相关问题