Python 超级构造函数——您将哪些参数放入子方法中?

Python super constructors -- which arguments do you put in the child method?

我创建了一个接受参数 namecolour 的 "Animal" class,以及一个名为 "Pig" 的子 class它应该从 "Animal" 继承 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" class 时,我不确定要在 __init__ 定义中放入哪些参数;应该是 namecolour,还是 name + colour + tailType?

另外,这个subclass是继承了Animal的__str__表示方法,还是我必须在"Pig" subclass里面再写一遍?

当我初始化一个 subclass 时,我真的不确定哪些参数放在哪里。我看过示例,它们都有非常简单的情况,只有一个参数 (self)。

如果我尝试做

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

我明白了

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

Superclasses 和 subclasses 在概念上是有道理的,但是在处理它们的语法时,我真的很吃力。

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

只需传递 namecolour

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

将其视为 super() 为我提供了来自父对象的绑定到我的对象的方法。它需要什么作为输入? namecolour?让我们通过它namecolour,然后。

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