您的位置:首页 > 编程语言 > Python开发

python-多态

2017-12-30 16:38 148 查看
python本来就是多态的
python的变量是没有类型的,只有指向的对象是有类型的,所有方法的调用都是调用对象的方法,不存在不多态的情况

比如我们定义一个动物类,然后该类有两个子类,分别为狗类和猫类,另外再定义一个医院类,

class pet:
def __init__(self,name):
self.name=name
def show(self):
print('动物在叫。。。')
class yiyuan:
def cure(self,pet):
print('{}在治病'.format(pet.name))
pet.show()
class dog(pet):
def show(self):
print('{}汪汪叫。。。'.format(self.name))
class cat(pet):
def show(self):
print('{}喵喵叫。。。'.format(self.name))
mydog=dog('二哈')
mydog.show()
mycat=cat('橘猫')
mycat.show()
yy=yiyuan()
yy.cure(mydog)
yy.cure(mycat)

》》》二哈汪汪叫。。。
》》》橘猫喵喵叫。。。
》》》二哈在治病
》》》二哈汪汪叫。。。
》》》橘猫在治病
》》》橘猫喵喵叫。。。

我们看医院的类,医院类里面cure方法接收一个pet类型,里面调用了pet的show方法,,我们新键狗和猫的类,

分别调用他们的show方法,猫和狗类可以不用写属性,因为继承了动物类,然后新建一个医院类,把每个动物类作为参数传递进来,然后调用传递进来的pet类的方法,

多态的好处就在于我们无需知道它的子类型,放心的调用show方法,而具体调用show方法是作用在pet、dog、cat类里面,这是由传递进来的对象决定,因此,只要传递进来的是pet类或者是其子类就会调用实际的show类

调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保
show
方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:

对扩展开放:允许新增Animal子类;

对修改封闭:不需要修改依赖Animal类型的
show
等函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: