zoukankan      html  css  js  c++  java
  • 多态及多态性和鸭子类型

    多态及多态性

    啥是多态?

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

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

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

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

    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
  • 相关阅读:
    ios初学者之Tableview的增删移
    ios初学者之在真机上调试应用程序
    androud 自定义属性
    在使用androidStudio中所遇到的错误
    用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片
    android 处理302地址
    Android获取屏幕长宽
    自定义的屏幕适配方法
    android小技巧和注意事项
    redis哨兵&codis
  • 原文地址:https://www.cnblogs.com/SlookUp/p/10750785.html
Copyright © 2011-2022 走看看