zoukankan      html  css  js  c++  java
  • 类的多态和抽象类

    一、多态

    多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)

    1. 序列数据类型有多种形态:字符串,列表,元组

    2. 动物有多种形态:人,狗,猪

    2.多态的目的:
    “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)。

    多态的表现 “形式之一” 就是继承:
    - 先抽象,再继承

    父类: 定制一套统一的规范。(比如: 方法名统一)
    子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一)

    注意: 在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了抽象类。

     动物的多种形态

    # 动物类
    class Animal:
    
        # 方法 吃
        def eat(self):
            pass
    
        # 方法 叫
        def speak(self):
            pass
    # 猪类
    class Pig(Animal):
        def eat(self):
            print('bia唧...')
    
        def speak(self):
            print('哼哼哼...')
    
    
    # 猫类
    class Cat(Animal):
        def eat(self):
            print('咬ji 咬ji....')
    
        def speak(self):
            print('喵喵喵...')
    
    
    # 狗类
    class Dog(Animal):
        def eat(self):
            print('舔 ji 舔ji...')
    
        def speak(self):
            print('汪汪汪...')
    
    
    animal1 = Dog()
    animal2 = Pig()
    animal3 = Cat()
    
    # 让动物们叫起来
    animal1.speak()
    animal2.speak()
    animal3.speak()
    抽象类
    1.什么是抽象类?

    在python内置的abc模块中,有一个抽象类。

    2.抽象类的作用:
    让子类必须遵循父类的编写规范。

    3.如何实现抽象类
    - 父类需要继承abc模块中,metaclass=abc.ABCMeta
    - 在父类的方法中,需要装饰上 abc.abstractmethod


    注意: 在python中不推荐使用抽象类。

    注意: 子类必须按照父类的方法编写规范,缺一不可。(只要父类中有几个抽象方法,子类就必须要定义几个)
    import abc
    # 父类
    class Animal(metaclass=abc.ABCMeta):
        # 方法 吃
        @abc.abstractmethod
        def eat(self):
            pass
    
        # 方法 叫
        @abc.abstractmethod
        def speak(self):
            pass
    
    
    # 猪类
    class Pig(Animal):
    
        def run(self):
            pass
    
        def eat(self):
            print('bia唧...')
    
        def speak(self):
            print('哼哼哼...')
    
    print(Pig.__dict__)
    print(Animal.__dict__)
    pig_obj = Pig()
    

      

     


  • 相关阅读:
    [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数
    携程SQL面试题忘大牛解答解决思路
    一些.Net面试题 (BS 方向)
    关于SQL SERVER高并发解决方案
    锁sql server锁
    MSSQL WITH (NOLOCK) 脏读
    python dict的函数
    conda常用命令
    sess.run() 中的fetches和feed_dict
    Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11952725.html
Copyright © 2011-2022 走看看