以下是我在学习python中的多态行为时正在使用的代码示例。 我的问题是:为什么我必须两次声明show_affection非常相似的功能?为什么不检查调用者(调用方法的实例)以及是否是Dog,做一件事,如果是猫做另一件事。
正如您在下面的示例代码中所看到的,show_affection在继承自Animal的Cat和Dog类中定义。
为什么不在Animal Class中声明show_affection,但我不知道如何检查调用者。像
def show_affection(self):
If caller is the Dog instance:
print("{0}.barks".format(self.name))
else:
print("{0}.wags tail".format(self.name))
这就是我所拥有的
class Animal(object):
def __init__(self, name):
self.name = name
def eat(self, food):
print("{0} eats {1}".format(self.name, food))
class Dog(Animal):
def fetch(self, thing):
print("{0} goes after the {1}".format(self.name, thing))
def show_affection(self):
print("{0} wags tail".format(self.name))
class Cat(Animal):
def swatstring(self):
print("{0} shreds the string".format(self.name))
def show_affection(self):
print("{0} purrs".format(self.name))
for a in (Dog('rover'), Cat('fluffy'), Cat('precious'), Dog('Scout')):
a.show_affection()
a.eat('bananas')
答案 0 :(得分:1)
这不是"重复自己"的一个例子,因为Cat.show_affection()
做了与Dog.show_affection()
不同的事情。如果两种方法相同,那么您可以通过在Animal
中定义一次实现来避免重复。但是,由于您希望Cat
和Dog
具有不同的行为,正确的方法是在每个类中实现该方法。
一般来说:
Cat
。Dog
。Animal
。