从python中的派生构造函数调用基础构造函数

时间:2013-10-21 09:17:06

标签: 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()

我是python世界的新手,无法弄清楚是什么问题

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您需要继承object才能使super()工作,self.nameself.age在将None传递给super()时始终为class parent(object): 调用。

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

{{1}}

答案 2 :(得分:1)

super()仅适用于新样式类(在Python3中,一切都是新样式)。所以你需要

class parent(object):

同样在调用super时,第一个参数是类的名称,而不是父类。子类中的调用应该是

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