python多态_Python面向对象之多态

5fe2065ef95f93e17a8403acf3b1a47b.gif

35504c7184da85b37700fc021adddf9a.png

Python面向对象之多态

d38d0093de7d7b867c57259f99ca7746.png

1

多态

        多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等(一个抽象类有多个子类,因而多态的概念依赖于继承)。

class Animal(object): # 同一类事物:动物    def speak(self):        passclass Cat(Animal): # 动物的形态之一:猫    def speak(self):        print('喵喵')class Dog(Animal): # 动物的形态之二:狗    def speak(self):        print('汪汪')class Pig(Animal): # 动物的形态之三:猪    def speak(self):        print('嗷嗷')

2

多态性

注意:多态与多态性是两种概念。

       多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

class Animal(object): # 同一类事物:动物    def speak(self):        passclass Cat(Animal): # 动物的形态之一:猫    def speak(self):        print('喵喵')class Dog(Animal): # 动物的形态之二:狗    def speak(self):        print('汪汪')class Pig(Animal): # 动物的形态之三:猪    def speak(self):        print('嗷嗷')c = Cat()d = Dog()p = Pig()def func(obj):    obj.speak()func(c) # opuput:喵喵func(d) # opuput:汪汪func(p) # opuput:嗷嗷

c8ba2112c43169b01c08f47a3057637b.gif

综合以上可以说多态性就是:一个接口,多种实现

多态性的好处:

  • 增加了程序的灵活性,以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj)。

  • 增加了程序可扩展性,通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(obj)去调用。

151faec537ed90ce8d44b0d4851603f1.gif

3

鸭子类型

    什么是鸭子类型(Duck Typing)?鸭子类型可解释为,如果一只动物,走起来像鸭子或者叫起来像鸭子,那么就可以把它称之为鸭子。

  python崇尚一种鸭子类型,类与类之间不用共同继承一个父类,只需要将它们做得像一种事物即可。

例如,如果想编写现有对象的自定义版本。

  1、可以继承该对象。

  2、可以创建一个外观和行为像,但与它无任何关系的全新对象。

class Duck(): # 定义一个鸭子类    def Walk(self): # 定义一个走路的函数        print("I walk like a duck")class Person():    def Walk(self):        print("This person walk like a duck")def func(Duck): # 定义一个函数,并传入参数Duck    Duck.Walk() # 调用Duck中的Walk方法duck = Duck()func(duck)# ouput: I walk like a duckperson = Person()func(person)# ouput: This person walk like a duck

    从以上代码可以看出func传入的参数为duck时,依旧也可以传入person参数,因为Duck和Person都拥有共同的方法Walk。

2ae0161886f7940d5ed6820c5b283802.gif

c7141c45ff72347a8081621c8727c7fc.png

长按可加小编微信哦~

85eba80361732fed2443eff618908446.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值