22、python面向对象编程--继承和多态

通过继承子类获得了父类的全部功能。

class Animal():
    def run(self):
        print('Animal is running...')

'''Cat 继承 Animal类'''
class Cat(Animal):
    pass

c = Cat()
'''Cat继承了Animal的run方法'''
c.run()

输出结果:
Animal is running...

多态

class Animal():
    def run(self):
        print('Animal is running...')

class Dog(Animal):
    '''子类和父类都存在相同的run()方法时,
    子类的run()覆盖了父类的run(),代码运行时,总是会调用子类的run()'''
    def run(self):
        print('Dog is running...')

class Cat(Animal):
    def run(self):
        print('Cat is running...')

#多态
'''当需要接受不同的子类型时,可以直接接受父类型,按照Animal类型进行操作即可
由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,
就会自动调用实际类型的run()方法'''
def run_twice(animal):
    animal.run()
    animal.run()
#
a = Animal()
d = Dog()
c = Cat()

run_twice(a)
run_twice(d)
run_twice(c)


输出:
Animal is running...
Animal is running...
Dog is running...
Dog is running...
Cat is running...
Cat is running...

静态语言 vs 动态语言

对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。

对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:

class Timer(object):
    def run(self):
        print('Start...')

这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值