多态及多态性和鸭子类型

多态及多态性

啥是多态?

指的是同一类/种事物的不同形态(其实就是继承关系的表现)

多态只是一种格式形态,它的主要体现是多态性,理解多态性的含义,就明白了多态。

把多态比喻为人的顽固,多态性就相当于人的顽固性。

那多态性在类中的表现形式是怎样的呢?

class Animal():
def run(self):
print('run fast')

class mouse(Animal):
def sound(self):
print('5555')

obj=mouse() #你看,这里是在mouse类中进行了实例化,但下面的obj调用的run()在mouse类中并不存在
         #我们自然而然就会想到mouse继承了Animal,所以obj会跑到Animal类中去找run()这个函数
         #为什么程序会通过.run()自己自动跑到父类里面去找,这就是多态提供的。
obj.run()

多态性:在多态的背景下,可以在不用考虑对象具体类型(也就是不管是子类还是父类中存在这种方法)的前提下而直接使用对象

多态性的精髓:统一(统一方法。继承关系下,子类方便调用父类中的方法)

 

当然,导入abc模块,能够让子类强制执行父类的功能(也就是子类自己有该方法,但只要父类中也有,子类就必须用父类的。有点不讲道理,所以用的比较少)

import abc #abstract class
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def eat(self):
pass

@abc.abstractmethod
def drink(self):
pass

@abc.abstractmethod
def run(self):
pass

@abc.abstractmethod
def bark(self):
pass

# obj=Animal() # 抽象基类本身不能被实例化

class Cat(Animal):
def eat(self):
print('cat eat')

def drink(self):
print('cat drink')

def run(self):
print('cat run')

def bark(self):
print('喵喵喵')

c=Cat()
View Code

 

扩展(Python统一思想----一切皆对象,Linux统一思想----一切皆文件)

鸭子类型

python是比较崇尚鸭子类型的,目的也是也是和多态一样,为了统一。只不过鸭子类型统一代码的格式。

例子一(这是非常经典的一个例子):

class Duck():
  def walk(self):
    print('I walk like a duck')
  def swim(self):
    print('i swim like a duck')

class Person():
  def walk(self):
    print('this one walk like a duck') 
  def swim(self):
    print('this man swim like a duck')
View Code

 

例子二:

class Disk:

    def read(self):

        print('Disk read')

 

    def write(self):

        print('Disk write')

 

class Memory:

    def read(self):

        print('Mem read')

 

    def write(self):

        print('Mem write')

 

class Cpu:

    def read(self):

        print('Cpu read')

 

    def write(self):

        print('Cpu write')

 

obj1=Disk()

obj2=Memory()

obj3=Cpu()

 

obj1.read()

obj2.read()

obj3.read()
View Code

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值