zoukankan      html  css  js  c++  java
  • 面向对象 多态 类方法 反射 (四)

    多态

    多态:

    指一种类型的事物,拥有多种形态(为了不同的事物调用,产生不同的结果)

    作用:

    为了在不知道对象具体类型的情况下,同一对象调用方法的规范。

    先抽象,再继承

    父类:

    定制一套统一的规范

    子类:

    遵循父类的统一的规范。

    多态的三种表现形式:

    继承父类:耦合度高,程序的可扩展性低

    继承抽象类:耦合度极高,程序的可扩展性极低

    鸭子类型:耦合度低,程序的可扩展性高

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

    抽象类

    抽象类:

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

    作用:

    让子类必须遵循父类的编写规范。

    如何实现:

    父类需要继承abc模块中,metaclass = abc.ABCMeta;

    在父类的方法中,需要装饰上 abc.abstrctmethod

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

    注意:子类必须按照父类的编写规范,缺一不可

    鸭子类型

    鸭子:

    不同的对象,只要长得像鸭子,动作像鸭子,那他就是鸭子!鸭子类型是多态的一种表现形式。

    作用:

    不同对象,先抽象出相同类型的方法,给他们定制一套统一的规范。

    所有的类,在定义时都按照统一的规范进行编写。

    多态的三种表现形式:

    继承父类:耦合度高,程序的可扩展性低

    继承抽象类:耦合度极高,程序的可扩展性极低

    鸭子类型:耦合度低,程序的可扩展性高

    注意:强烈建议推荐使用鸭子类型

    class Pig:
        def eat(self):
            print('吧唧吧唧')
        def speak(self):
            print('哼哼哼')
    class Cat:
        def eat(self):
            print('幺鸡幺鸡')
        def speak(self):
            print('喵喵喵')
    class Dog:
        def eat(self):
            print('添唧添唧')
        def speak(self):
            print('汪汪汪')
    

    类方法

    classmethod和staticmethod都是python解释器内置的装饰器。

    classmethod:

    是一个装饰器,给在类内部定义方法中装饰,将类内部的方法变为’类的绑定方法’。

    staticmethod:

    静态方法

    是一个装饰器,给在类内部定义方法中装饰,将类内部的方法变为’非绑定方法’。

    对象的绑定方法:

    由谁来调用,由谁来调用,会将谁(对象)当作第一个参数传入。

    类的绑定方法:

    由类来调用,由谁来调用,会将谁(类)当作第一个参数传入。

    非绑定方法:

    可以由对象或类来调用,谁来调用都是一个普通的方法(普通函数),方法需要传入几个参数,就得传入几个。

    isinstance 与 issubclass

    isinstance 与 issubclass 都是内置模块:

    isinstance:

    判断一个对象是否是另一个类的实例。

    如果是,true;如果不是,false;

    issubclass:

    判断一个类是否是另一个类的子类

    如果是,true;如果不是,false;

    class Father:
        pass
    class Sub:
        pass
    class Foo(Sub):
        pass
    #print(isinstance(FOo,Sub))
    #print(issubclass(Sub,Father))
    

    反射

    反射:指的是通过字符串对 对象的属性进行操作

    hasatter:通过字符串判断对象的属性或方法是否存在。

    getatter:通过字符串获取对象的属性或方法。

    setatter:通过字符串设置对象的属性或方法。

    delatter:通过字符串删除对象的属性或方法。

    注意:反射的四个方法都是内置的

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    顺序表的扩容
    顺序表的插入
    顺序表的构造
    C# ContentType: "application/json" 请求方式传json
    顺序表构造,插入,扩容操作
    顺序表
    线性表
    算法
    数据结构的分类
    什么是数据结构
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863904.html
Copyright © 2011-2022 走看看