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中的变形后的方法,做了一次转换,了解即可

  • 相关阅读:
    【.net】从比较两个字节数组谈起
    不靠谱招聘信息大围观 第一季
    微软社区大课堂招募学生
    [WPF]带下拉列表的文本框
    SVN: is scheduled for addition, but is missing
    bootstrap模态框手动开启关闭与设置点击外部不关闭
    PHP实现各种经典算法
    使用vue如何默认选中单选框
    vue使用resource传参数
    视频处理工具FFmpeg的安装(windows/Linux)
  • 原文地址:https://www.cnblogs.com/zhongzhouyun/p/14967541.html
Copyright © 2011-2022 走看看