הרא*_*ונה 0 python polymorphism class-method
我正在练习多态,以下代码返回错误
class Animal:
def talk(self, something):
print(something)
class Dog(Animal):
def talk(self):
super().talk("woof woof")
Bonny = Dog
Bonny.talk()
Run Code Online (Sandbox Code Playgroud)
TypeError: talk() missing 1 required positional argument: 'self'
Run Code Online (Sandbox Code Playgroud)
根据我学到的,邦尼应该是自我论证,所以为什么自我缺失?
您在Bonny = Dog.处缺少一些括号。
class Animal:
def talk(self, something):
print(something)
class Dog(Animal):
def talk(self):
super().talk("woof woof")
Bonny = Dog()
Bonny.talk()
Run Code Online (Sandbox Code Playgroud)
由于这是我目前投票最高的答案,并且仍然有一些活动,并且显然缺乏一些解释,我想补充一些。
Bonny = Dog
Run Code Online (Sandbox Code Playgroud)
手段,Bonny是对Dog类的引用。它是可调用的,并且Dog. Bonny不会是一种类型。
Bonny = Dog()
Run Code Online (Sandbox Code Playgroud)
如果你想像上面那样调用对象,你应该添加括号。这意味着您调用对象并引用它。Bonny将作为参考。
对对象的引用也应该是小写的。
bonny = Dog()
Run Code Online (Sandbox Code Playgroud)
第二件事。由于您的对象表明它们可能包含与每个相同类型的对象(2 个或更多 Dog 对象)对应的数据,因此需要一个 constructor .
class Dog(Animal):
def __init__(self, name):
super(Dog, self).__init__(self)
self.name = name
def talk(self):
super().talk("woof woof my name is {}".format(self.name))
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以为您的狗命名,让他说出他的名字,然后print(bonny)还可以使用该__str__方法打印他的名字。但您还需要使用 OPAnimal使用的super函数调用超级(在本例中为对象)的 init 函数。
类继承在 Python 中并不是最简单的事情,因为它不是一种强面向对象的语言。但是课程很棒!
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |