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:通过字符串删除对象的属性或方法。

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

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863904.html
Copyright © 2011-2022 走看看