zoukankan      html  css  js  c++  java
  • 封装

    封装

    1、概念:

      --对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口

    学习封装的目的是为了能够限制外界对内部的数据访问

    在python中属性的权限分为两种(默认为公开的)

      --1、公开的

          没有任何限制,谁都能访问到,并且可以修改

      --2、私有的

          只有当前类本身能够访问,并且修改

    2、优点:

    封装主要封装的是类中的数据,类中的数据分为两种:属性和方法

      --1、提高安全度

          封装属性(通过方法访问被封装的属性叫访问器,修改属性叫设置器)

      --2、隔离复杂度

          封装方法(一个为内部提供支持的方法,不应该让外界直接访问,就直接封装起来)

    3、封装原理:

      --1、python封装的原理就是变形,就是把__开头的名字变形为_类名__名字

      --2、所以也可以直接使用变形之后的名字直接访问属性,但通常没必要这么做

      --3、变形只会发生一次,就是在类的定义阶段,后续再添加的双下划线开头的名字不会产生变形

    4、装饰器property:

      作用:把一个方法伪装成属性

      原因:为了把访问私有属性的方式变得和访问公有属性一样,可以直接点出来而不用带括号

    class Student:
        def __init__(self,name,age):
            self.name = name
            self.__age = age
        
        @property           # 这样就可以直接通过stu.age访问私有属性了
        def age(self):
            return self.__age
    stu = Student('faker',20)

      与property相关的两个装饰器:

        1、setter:如果property装饰了一个函数,可以通过函数名.setter来把方法伪装成修改公有属性的方式,

              直接在外界赋值就相当于调用这个方法

        2、deleter:如果property装饰了一个函数,可以通过函数名.deleter来把方法伪装成共有属性删除属性的方式,

              直接在外界del属性名就相当于调用这个方法

    5、计算属性(用到的也是property装饰器)

      有些属性它不是固定的,它是通过某些值计算得来的,是一个不稳定的值,这样我们就需要通过对属性的计算得到新的属性,并且把这个新的属性调用方式变成和那些固定的方法一样,例如人的健康指数BMI

    多态

    1、定义:

      多态指的是多个不同类型对象可以响应同一个方法,并且产生不同的结果

    2、优点:

      只需要学习基类中的使用方法即可,不需要关心具体哪一个类 怎么实现的,以不变应万变,提高拓展性

    3、如何实现:

      可以通过接口、抽象类来实现,python最崇尚的是鸭子类型

    常用内置函数

    1、__str__:

      执行条件: 当对象被转换成字符串时,会自动执行该函数下的内容

      使用场景: print过程中有转换str的步骤,所以可以根据这个函数的特性

      自定义一些打印格式

    2、__del__:  析构函数

      执行条件 : 当对象被删除前,会自动执行该函数

      使用场景:

        当你的对象在创建时,开启了不属于解释器的资源,例如打开了一个文件

        必须保证当对象被删除时,同时关闭额外的资源

      总结: __del__该函数用于在对象删除前做一些清理操作

    反射

    1、反射定义:

      指一个对象必须具备发现自身属性,以及修改自身属性的能力

      反射就是通过字符串来操作对象属性

    2、涉及到的方法:

      hasattr:判断是否存在某个属性

      getattr:获取某个属性的值

      setattr:新增或者修改某个属性

      delattr:删除某个属性的值,(必须是自己名称空间有的属性,和hasattr判断条件不一样)

    hasattr、getattr、delattr用法一样都是(对象,属性的字符串)

    setattr用法(对象,属性的字符串,新增或者修改的值)

    动态导入模块

    #1、静态导入:直接import导入     ,建立在一个基础上,提前已经知道有这个模块      ,导入方法写死的

    #2、动态导入:指的是在需要的时候,通过指定字符串类型的包名来导入需要的模块

    import import.lib

    mk = importlib.import_module(m_name)

      m_name:包名

      mk:成功导入的模块

    该方式常用在框架中,因为框架设计者不可能提前预知后续需要的模块和类,都是通过动态导入,提供需要导入的包名或模块名进行导入

  • 相关阅读:
    MySQL的max()函数使用时遇到的小问题
    scp命令需要指定端口时要紧跟在scp后
    linux系统之间基于密钥对免输入密码登陆
    c++的引用用法
    预测模型
    mysql出现ERROR 1366 (HY000):的解决办法
    R语言可视化--颜色
    R语言可视化--ggplot函数
    R语言可视化--qplot函数
    R语言可视化二
  • 原文地址:https://www.cnblogs.com/hesujian/p/10896265.html
Copyright © 2011-2022 走看看