python-多态

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等函数。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值