• 多态与多态性


    什么是多态,什么是多态性

    多态是指一类事物的多种形态,例如:动物类(猪,狗,人...)

    多态性是指在不考虑实例的情况下使用实例

    多态性的好处

    1. 增加了程序的灵活性
    2. 增加了程序额可拓展性

    多态基础

    class Animal:
        def speak(self):
            pass
    
    class Pig(Animal):
        def speak(self):
            print('哼哼哼')
    
    class Dog(Animal):
        def speak(self):
            print('汪汪')
    
    class People(Animal):
        def speak(self):
            print('say hello')
    
    pig=Pig()
    dog=Dog()
    people=People()
    # pig.speak()
    # dog.speak()
    # people.speak()
    
    def animal_speak(obj):
        obj.speak()
    animal_speak(pig)
    animal_speak(people)
    
    #第一种方式:用abc实现接口统一化,约束代码(用的比较少)
    import abc
    #第一在括号中写metaclass=abc.ABCMeta
    class Animal(metaclass=abc.ABCMeta):
        #第二在要约束的方法上,写abc.abstractmethod装饰器
        @abc.abstractmethod
        def speak(self):
            pass
    
    class Pig(Animal):
        def speak(self):
            print('哼哼哼')
    class Dog(Animal):
        def yy(self):
            print('汪汪')
    
    class People(Animal):
        def zz(self):
            print('say hello')
    
    
    people = People()
    people.zz()
    # 这样就不能利用多态性
    def animal_speak(obj):
        obj.speak()
    pig=Pig()
    
    #第二种方式,用异常处理来实现(常用)
    class Animal():
        def speak(self):
            #主动抛出异常
            raise Exception('你得给我重写它啊')
    class Pig(Animal):
        def speak(self):
            print('哼哼哼')
    class People(Animal):
        def speak(self):
            print('say hello')
    pig=Pig()
    pe=People()
    def animal_speak(obj):
        obj.speak()
    
    animal_speak(pig)
    animal_speak(pe)
    
    

    python中鸭子类型

    Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子

    class Pig:
        def speak(self):
            print('哼哼哼')
    class People:
        def speak(self):
            print('say hello')
    
    pig=Pig()
    pe=People()
    def animal_speak(obj):
        obj.speak()
    animal_speak(pig)
    animal_speak(pe)
    
    传统写法
    class File:
        def read(self):
            pass
        def write(self):
            pass
    #内存类
    class Memory(File):
        def read(self):
            print('Memory...read')
        def write(self):
            print('Memory...write')
    
    class Network(File):
        def read(self):
            print('Network...read')
        def write(self):
            print('Network...write')
    
    鸭子类型写法
     内存类
    class Memory:
        def read(self):
            print('Memory...read')
    
        def write(self):
            print('Memory...write')
    
    class Network:
        def read(self):
            print('Network...read')
    
        def write(self):
            print('Network...write')
    
    def read(obj):
        obj.read()
    m=Memory()
    n=Network()
    read(m)
    read(n)
    
    
  • 相关阅读:
    流量数据iftop命令
    DNS A记录和CNAME记录
    centos6.5安装mysql
    Python列表插入字典(转)
    列表转字典
    python 二分法O(logn)
    centos 6.5搭建Samba
    反爬虫-----看这一篇就够了
    windows常用命令
    requests中文页面乱码解决方案【转】
  • 原文地址:https://www.cnblogs.com/aden668/p/11425235.html
Copyright © 2020-2023  润新知