我正在练习多态性,下面的代码返回错误
class Animal:
def talk(self, something):
print(something)
class Dog(Animal):
def talk(self):
super().talk("woof woof")
Bonny = Dog
Bonny.talk()
TypeError: talk() missing 1 required positional argument: 'self'
根据我所学到的,邦尼应该是自我论证者,那么为什么自我会缺失呢
Tags:
您没有初始化对象,只是创建了名为
Bonny
的Dog
类的副本。通过打印它们,您可以看到Dog()
和Dog
之间的区别第一行是指一个名为
Animal
的类,但第二行是类Animal
的对象。因此,如果要创建类的对象,必须初始化该类(与第二种形式相同)。 您的正确代码如下所示:根据Python Style Guide的规定,用小写字母命名对象是标准的
在
Bonny = Dog
处缺少一些括号编辑
由于这是我目前投票最多的答案,仍然有一些活动,而且显然缺乏一些解释,我想补充一些
意思是,
Bonny
是对Dog
类的引用。它是可调用的,并且将调用Dog
的实例Bonny
将不是一个类型如果您想像上面那样调用对象,应该添加括号。这意味着您调用对象并引用它
Bonny
将作为参考对对象的引用也应该是小写的
第二件事。由于您的对象表明它们可能包含对应于相同类型的每个对象(2个或多个Dog对象)的数据,因此需要一个
constructor
这样你可以给你的狗命名,让它说出自己的名字,然后在
print(bonny)
上,也可以用__str__
方法打印它的名字。但是您还需要使用OP使用的super
函数调用super的(在本例中是Animal
对象)init函数类继承在Python中不是最简单的事情,因为它不是一种强OO语言。但是课程太棒了
相关问题 更多 >
编程相关推荐