2013-10-21 50 views
0

应该怎样才能做到执行它调用基类的构造源自构造在python

class parent(): 
    age=None 
    name=None 
    def __init__(self,name,age): 
     self.name=name 
     self.age=age 
    def printout(self): 
     print(self.name) 
     print(self.age) 

class child(parent): 
    def __init__(self,name,age,gender): 
     super(parent,self).__init__(self.name,self.age) 
     print gender 

c=child("xyz",22,"male") 
c.printout() 

我在蟒蛇的世界是一个新手,找不出什么问题

回答

2

super()只适用于新款类;添加object的基类parent

class parent(object): 

您可能需要调整您的通话super()也。你需要给当前类,而不是parent类开始搜索,并self.nameself.age仍设置为None__init__被调用的时候,但你似乎想通过对nameage参数:

def __init__(self, name, age, gender): 
    super(child, self).__init__(name, age) 
    print gender 

有了这些变化,代码工作:

>>> c = child("xyz", 22, "male") 
male 
>>> c.printout() 
xyz 
22 
+0

它的工作....感谢(Y) –

1

你需要从object继承做出super()工作,也self.nameself.age总是None当你将它们传递给super()调用。

class parent(object): 

和:

super(child, self).__init__(name, age) 
+0

是的,他们已经确定!; *在课堂*上。然而,这可能不是OP想要的。 ;-) –

+0

啊,在课堂上。谢谢。 – Fabian

1

super()作品只新式类(在Python3,一切都是新的样式)。所以你需要

class parent(object): 
在调用超

此外,第一个参数是孩子类没有父类的名称。在子类中的调用应该是

super(child, self).__init__(name, age)