• 多态


    多态

    1、什么是多态

      多态指的就是同一种事物多种形态

    2、为什么要用多态

      用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),这样便可以在不用考虑

    对象具体类型的前提下而直接使用对象下的方法

    3、如何用多态

    class animal:
        def eat(self):
            pass
        def drink(self):
            pass
        def run(self):
            pass
        def bark(self):
            pass
         
    class dog(animal):
        def speak(self):
            print('汪汪汪')
    class cat(animal):
        def jiao(self):
            print('喵喵喵')
    class pig(animal):
        def han(self):
            print('哼哼哼‘)
    多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法
     c.eat()
     d.eat()
     p.eat()
    
     c.drink()
     d.drink()
     p.drink()
    
    #
     d.bark()
     p.bark()
     c.bark()
    
     d.speak()
     c.jiao()
     p.han()

    我们发现我们在调用的时候与父类中属性不同,所以导致不能用到父类中属性。

    所以,我们要固定调用方法

    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('喵喵喵')
    
    class Dog(Animal):
        def eat(self):
            print('dog eat')
    
        def drink(self):
            print('dog drink')
    
        def run(self):
            print('dog run')
    
        def bark(self):
            print('汪汪汪')
    
    class Pig(Animal):
        def eat(self):
            print('pig eat')
    
        def drink(self):
            print('pig drink')
    
        def run(self):
            print('pig run')
    
        def bark(self):
            print('哼哼哼')
    
    c=Cat()
    d=Dog()
    p=Pig()
    
    
    # c.bark()
    # d.bark()
    # p.bark()
    
    
    # def BARK(animal):
    #     animal.bark()
    #
    #
    # BARK(c)
    # BARK(d)
    # BARK(p)
    
    
    
    s='hello'
    l=[1,2,3]
    t=(4,5,6)
    
    s.__len__()
    l.__len__()
    t.__len__()
    
    
    # def LEN(obj):
    #     return obj.__len__()
    #
    # print(LEN(s))
    # print(LEN(l))
    # print(LEN(t))
    print(len(l))
    print(len(s))
    print(len(t))

    鸭子类型(了解一下)

    class Foo:
        def f1(self):
            print('from foo.f1')
    
        def f2(self):
            print('from foo.f2')
    
    class Bar:
        def f1(self):
            print('from bar.f1')
    
        def f2(self):
            print('from bar.f2')
    
    
    obj1=Foo()
    obj2=Bar()
    
    
    obj1.f1()
    obj1.f2()
    
    obj2.f1()
    obj2.f2()
    
    
    
    
    class Disk:
        def read(self):
            print('disk read')
    
        def write(self):
            print('disk write')
    
    
    class Txt:
        def read(self):
            print('txt read')
    
        def write(self):
            print('txt write')
    
    
    class Process:
        def read(self):
            print('process read')
    
        def write(self):
            print('process write')
    
    
    obj1=Disk()
    obj2=Txt()
    obj3=Process()
    
    
    obj1.read()
    obj2.read()
    obj3.read()
  • 相关阅读:
    MapReduce 中的Map后,sort不能对中文的key排序
    wordCount程序中MapReduce工作过程分析
    使用eclipse的快捷键自动生成的map或者reduce函数的参数中:“org.apache.hadoop.mapreduce.Reducer.Context context”
    "hadoop namenode -format"命令的作用和影响的文件
    伪分布模式下使用java接口,访问hdfs
    MySQL Server 5.5.44免安装版配置详解
    quartz Cron表达式一分钟教程
    【转载】jQuery弹出层始终垂直居中于当前屏幕
    LeetCode 151 翻转字符串里的单词
    LeetCode 43 字符串相乘
  • 原文地址:https://www.cnblogs.com/wuchenyu/p/8856084.html
Copyright © 2020-2023  润新知