关于如何创建子类的简单问题?

Simple question on how to create subclasses?

我是Python面向对象编程的新手,学校给了我一个问题,先创建一个class,叫做“Mammal”,具有属性“name”和方法 get_name()。因此我想到了这个:

class Mammal(object):
    def __init__(self, name):
        self.name = name
        
    def get_name(self):
        return self.name

看起来不错。问题的下一部分要求我创建一个名称为 dog 且方法相同的子 class Dog。出于对 superclass 的继承,我创建了:

class Dog(Mammal):
    def __init__(self,name):
        super().__init__(name)

我得到了测试用例 Dog().get_name(),输出应该是 Dog,但我一直收到错误 TypeError: __init__() missing 1 required positional argument: 'name'。然后我尝试修改第三行第二个代码为

class Dog(Mammal):
    def __init__(self,name):
        super().__init__(Dog)

但错误依旧。我在网上搜索了如何从 superclass 进行继承,看来我的代码结构是正确的,但我根本无法将名称 "Dog" 传递到 class 中来制作 get_name() 工作。

谁能告诉我这有什么问题吗?非常感谢任何帮助!

第一个例子

您指定输入一个名称来构建您的 Dog 子类

class Dog(Mammal):
    def __init__(self,name):   # <--- name parameter
        super().__init__(Dog)

所以如果你想创建你的子类的实例,你必须提供一个名称(暗示类型字符串)。为此,您必须构建一个这样的实例:

Dog("Berry").get_name()

此代码将 return 字符串“Berry”,这是您在构造函数中指定的名称。

第二个例子

class Dog(Mammal):
    def __init__(self,name):   # <--- name is unused, so it can be removed
        super().__init__(Dog)

你用你的子类 Dog 调用父构造函数,所以如果你在那个实例上做 get_name(),它不会 return 字符串“Dog”,但它会 return Dog 子类。

请记住,python 确实是动态的,如果类型不正确,它不会立即抛出错误,因此它会被解释。我建议您详细阅读 类 的一般工作原理,以更好地理解通用原则以及它如何对您的代码有益。