Python超级构造函数 - 你在子方法中放入哪些参数?

时间:2017-05-19 20:02:45

标签: python superclass

我创建了一个“Animal”类,它接受参数namecolour,以及一个名为“Pig”的子类,它应该继承namecolour “动物”,但也应该采用新参数TailType

这是我到目前为止所做的:

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

    def get_name(self):
        return self.name

    def set_name(self, newName = ""):
        self.name = newName

    def set_colour(self, newColour = ""):
        self.colour = newColour

    def get_colour(self):
        return self.colour

    def __str__(self):
        return self.get_name() + ' : ' + self.colour

class Pig(Animal):
    def __init__(self, name, colour, tailType):
        super().__init__()
        self.tailType = tailType

当我初始化“Pig”类时,我不确定在__init__定义中放入哪些参数;它应该是namecolour,还是name + colour + tailType

此外,这个子类是否继承了Animal的__str__表示方法,还是必须在“Pig”子类中再写一次?

当我初始化一个子类时,我真的不确定哪些参数在哪里。我看了一些例子,他们都有一个非常简单的案例,有一个参数(自我)。

如果我尝试

john = Pig('John', 'pink', 'curly')

我得到了

TypeError: __init__() missing 2 required positional arguments: 'name' and 'colour'

超类和子类在概念上是有意义的,但是当谈到处理它们的语法时,我真的很挣扎。

注意:请不要参考我对超类构造函数的一般解释:我已经阅读了很多它们,但在这种情况下仍然不知道如何应用它们。

1 个答案:

答案 0 :(得分:3)

只需通过namecolour

class Pig(Animal):
    def __init__(self, name, colour, tailType):
        super().__init__(name, colour)
        self.tailType = tailType

把它想象成super()为我提供了来自父对象的方法,绑定到我的对象。作为输入需要什么? namecolour?我们将其传递给namecolour,然后再传递它。

是的,__str__是像任何其他方法一样继承的。