关于如何创建子类的简单问题?
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 确实是动态的,如果类型不正确,它不会立即抛出错误,因此它会被解释。我建议您详细阅读 类 的一般工作原理,以更好地理解通用原则以及它如何对您的代码有益。
我是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 确实是动态的,如果类型不正确,它不会立即抛出错误,因此它会被解释。我建议您详细阅读 类 的一般工作原理,以更好地理解通用原则以及它如何对您的代码有益。