面向对象之多态

多态指的是一类事物有多种形态,多态性是指在不考虑实例类型的情况下使用实例

class Animals:
    def run(self):
        print('running')


class Dog(Animals):
    def run(self):
        print('dog is running')


class Pig(Animals):
    def run(self):
        print('pig is running')


def func(animal):
    animal.run()


dog = Dog()
func(dog)

pig = Pig()
func(pig)

pig 和dog都是动物,都会有run 功能,我们在使用实例时不必考虑是pig还是dog,只要是动物,就会有run。
我们可以定义一个功能,func,传入dog时,打印dog is running,传入pig时
pig is running。

class Cat(Animals):
    def run(self):
        print('cat is running')


cat = Cat()
func(cat)

如果我们新增一个类,此时不必对func做任何修改,只知道它是animals类型,就能直接调用cat,这就是多态。只要func函数正常,我们只要知道它是Animals类型,不用修改函数func,只管调用就可以,即使新增了类,只要保证是同一类型,都可以同一种形式去调用,增加了程序的灵活性和可扩展性。

更进一步,则不一定需要传入Animals类型。我们只需要保证传入的对象有一个run()方法就可以了:

class Car:
    def run(self):
        print('car is running')


car = Car()
func(car)

car is running

这就是动态语言的“鸭子类型”,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子,就像之前学过的序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系,都可以用 len()方法一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值