zoukankan      html  css  js  c++  java
  • 封装


    什么是封装?

    封装指的是将一个类中的属性和方法进行隐藏,让外界无法直接调用;


    为什么我们要隐藏起来不给外部调用?

    不是不给外部调用,而是不能直接调用,我们要想处理内部的变量,就需要用该类提供的方法;然后由于业务需求,我们就能够在方法中增加一些业务处理,从而不让使用者恶意使用;这就是为什么要封装的原因


    封装数据属性的目的

    封装实例属性或类属性的方法
    隐藏变量的目的在于让外界操作者无法恶意更改

    image.png


    封装函数属性的目的

    将外部使用者没必要使用的方法隐藏起来,可以降低使用者的复杂度,不然的话使用者使用.调用时能够看到一堆方法;
    所以说隐藏函数属性的目的是为了降低使用者复杂度

    image.png


    封装的方式

    封装数据属性和封装函数属性是一样的,都是通过给属性开头增加单下划线或双下划线


    单下划线封装

    定义:"单下划线"开始的成员变量叫做保护变量
    作用:只有类对象和子类对象自己能访问到这些变量;不过外部也能够进行访问,只是不会存在调用提示,这种属于防君子不防小人;


    双下划线封装

    定义:双下划线" 开始的是私有变量
    作用:意思是只有类对象自己能访问,连子类对象也不能访问到这个数据;外部也不能访问,调用时不会存在提示,这种相对于单下划线的方式,起到了一定的限制作用;

    不过也不是不能访问,通过__dict__方法中对属性的存储,可以看到这只是对原有变量进行了变形,如果直接使用这个变形后的变量访问,还是能够访问到的;

    class F:
        age = 18
        _name = 'age'
        __height = '180m'
    
    print(F.__dict__)
    

    {'age': 18, '_name': 'age', '_F__height': '180m'}
    

    那么为什么类的内部能直接调用?
    是因为在检查类语法的时候,会将类内部的私有变量转换成dict中的变形后的方法,做了一次转换,了解即可

  • 相关阅读:
    H3C交换机流量镜像
    脚本引发的思考
    【PAT Advanced Level】1015. Reversible Primes (20)
    JSTL自定义函数完成ACL即时认证
    [翻译Joel On Software]选择一门语言/Choosing a language
    MFC-CWinApp
    poj2462
    HDU 3472 混合图欧拉回路 + 网络流
    Vim命令合集
    Windows下SQLMAP的安装图解
  • 原文地址:https://www.cnblogs.com/zhongzhouyun/p/14967541.html
Copyright © 2011-2022 走看看