• python面向对象之多态


    多态

    第一阶段:判断一个变量是否是某个类型可以用isinstance()判断

    class Animal(object):
        def run(self):
            print("Animal is running")
    
    class Dog(Animal):
        def run(self):
            print("Dog is running")
    
    class Cat(Animal):
        def run(self):
            print("Cat is running")
    
    a = list() # a是list类型
    b = Animal() # b是Animal类型
    c = Dog() # c是Dog类型
    
    
    >>> isinstance(a, list)
    True
    >>> isinstance(b, Animal)
    True
    >>> isinstance(c, Dog)
    True
    

    阶段二:Dog是Animal的子类,那么c是否也算是Animal数据类型了?答案是肯定的,那么这个现象又说明了什么问题?

    >>> isinstance(c, Animal)
    True
    

    只要子类继承自父类,子类和父类的类型相同。

    阶段三:写函数,用来驱赶dog和cat,然后让dog和cat跑起来,应该如何做?

    # 正常的情况下:
    
    class Animal(object):
        def run(self):
            print("Animal is running")
    
    class Dog(Animal):
        def run(self):
            print("Dog is running")
    
    class Cat(Animal):
        def run(self):
            print("Cat is running")
    
            
    def testDrive_out_dog(dog):
        print("驱赶dog")
        dog.run()
        
    def Drive_out_cat(cat):
        print("驱赶cat")
        cat.run()
    
    testDrive_out_dog(Dog())
    Drive_out_cat(Cat())
    

    第四阶段:对于上面的方法**,如果我有一万种动物需要驱赶,难道我也要写一万个驱赶函数吗?NO

    class Animal(object):
        def run(self):
            print("Animal is running")
    
    class Dog(Animal):
        def run(self):
            print("Dog is running")
    
    class Cat(Animal):
        def run(self):
            print("Cat is running")
            
            
    def Drive_out_animal(animal):
        print(f"驱赶animal")
        animal.run()
        
    Drive_out_animal(Dog())	
    Drive_out_animal(Cat())
    

    其实我们只需要传入对象即可,因为dog和cat都有自己的run()方法。这就是多态。对于使用者来说,自己的代码根本无需改动,只需要拥有run()方法即可。

  • 相关阅读:
    从Object对象中读取属性的值
    CentOS7安装Mysql
    CentOS初使用命令总结
    linux安装git、node、pm2
    将 ELASTICSEARCH 写入速度优化到极限
    Elasticsearch
    elasticsearch5.0.1集群索引分片丢失的处理
    ELASTICSEARCH健康red的解决
    使用linux远程登录另一台linux
    fiddler构造表单上传文件的请求
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/11053098.html
Copyright © 2020-2023  润新知