• 面向对象之多态


    print('面向对象之多态')
    '''
    利用组合解决代码冗余问题
    1.什么是组合?
    组合指的是一个对象拥有某一个属性,该属性的值是另一个类的对象
    例如:
    obj = Foo() ###obj是调用类产生的一个对象
    obj.attr1 = Bar1()
    obj.attr2 = Bar2()
    obj.attr3 = Bar3()
    这样我们在obj一个对象中,就可以用到 Foo ,Bar1,Bar2,Bar3四个类中的属性和功能

    2.为何用组合?
    为了减少类与类之间代码冗余的问题
    3.如何用组合?
    就像操作类的属性一样,直接增删改查,只不过这里的值是另一个类的对象


    二.多态与多态性
    多态:
    面向对象的第二个特性
    多态指的是同一种事物的多种形态,这就叫多态,
    一个父类下面有多个子类继承,也就是可以理解成,这个父类有多个表现形式,也就是多态
    多态性:
    可以在不用考虑独享具体类型的情况下面直接使用对象

    优点:归一化,简化对象的使用

    '''

    import abc
    ###下面这个父类叫做抽象基类
    ##抽象积累:但凡继承该类的子类都必须实现speak 和run 而名字也必须相同
    ##注意:不能是实例化抽象基类
    class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod###这个是固定写法,要求该类下的子类都必须有这个相同的功能,名字相同
    def speak(self):
    pass

    @abc.abstractmethod
    def run(self):
    pass
    ###固定规范写法,要求该类下面的子类 都必须要有@abc.abstractmethod装饰的功能 ,名字相同,语法规范也相同
    class People(Animal):

    def speak(self):
    print('say hello ')
    def run(self):
    print('runing')

    class Pig(Animal):

    def speak(self):
    print('哼哼哼')
    def run(self):
    print('runing')

    class Dog(Animal):

    def speak(self):
    print('汪汪汪')
    def run(self):
    print('runing')
    ##现在我们实例化产生三个对象,都属于动物
    obj1 = People()
    obj2 = Pig()
    obj3 = Dog()

    ###现在我们只需要知道这三个对象都是动物,那么我们就可以调用run 和speak 等相关功能了
    obj1.run()
    obj2.run()
    obj3.run()
    obj1.speak()
    obj2.speak()
    obj3.speak()


    ##我们觉得像上面那样调用太Low了 于是我们自己定义一个函数,直接将对象传进去,自动调用
    ##相关的功能,这样就简单多了
    def run(obj):
    obj.run()
    run(obj1)
    run(obj2)
    run(obj3)

    def jiao(obj):
    obj.speak()

    jiao(obj1)
    jiao(obj2)
    jiao(obj3)

    ##Linux:一切皆文件
    ###python 崇尚鸭子类型:其实也不需要每个类硬性的去继承同一个类,继承一个父类
    ##只要他们定义了相同的功能与属性,那么我们就可以直接用
    ##也就是将其做得像一个鸭子,然后我们就可以直接拿他当做鸭子
    ##只要长得像鸭子,具备和鸭子相同的功能嘎嘎叫,那么我们叫将其称为鸭子

  • 相关阅读:
    一张图理解prototype、proto和constructor的三角关系
    深入理解javascript对象系列第三篇——神秘的属性描述符
    深入理解javascript对象系列第二篇——属性操作
    深入理解javascript对象系列第一篇——初识对象
    javascript类型系统——Math对象
    Django的第一个页面
    关于原型链
    js中的继承问题
    面向对象关于函数以及this的问题
    关于bind、call以及apply
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10909134.html
Copyright © 2020-2023  润新知