码迷,mamicode.com
首页 > 其他好文 > 详细

rax学习(一):第一个rax应用程序程序HelloWorld

时间:2020-08-10 00:06:29      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:应用   load   native   脚本   npm   loading   模块   script   info   

面向对象的三大特性是指:封装、继承和多态。

一 封装

1 封装的基本概念

  • 不同定义——不管什么形式,封装的都是数据和方法,无论哪种层面的封装,都要对外界提供好访问你内部隐藏内容的接口。
    • 代码封装,其实就是隐藏实现功能的具体代码,仅留给用户使用的接口,就好像使用计算机,用户只需要使用键盘、鼠标就可以实现一些功能,而根本不需要知道其内部是如何工作的
    • 类的封装,即在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,将无法直接以“类对象.属性名”(或者“类对象.方法名(参数)”)的形式调用这些属性(或方法),而只能用未隐藏的类方法间接操作这些隐藏的属性和方法。
    • 模块,可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。
  • 一般意义上的封装:我们一般讲的封装都是指类的封装
  • 注意:封装绝不是将类中所有的方法都隐藏起来,一定要留一些像键盘、鼠标这样可供外界使用的类方法。
  • 原因:封装不是单纯意义的隐藏
    • 封装数据的主要原因是:保护隐私
    • 封装方法的主要原因是:隔离复杂度
  • 两个层面:
    • 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空间,我们只能用类名.或者obj.的方式去访问里面的名字,这本身就是一种封装。
      • 注意:对于这一层面的封装(隐藏),类名.和实例名.就是访问隐藏属性的接口
    • 第二个层面的封装:类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。

2 类封装的好处

  • 可维护性:封装机制保证了类内部数据结构的完整性,因为使用类的用户无法直接看到类中的数据结构,只能使用类允许公开的数据,很好地避免了外部对内部数据的影响,提高了程序的可维护性。
  • 复杂度:对一个类实现良好的封装,用户只能借助暴露出来的类方法来访问数据,我们只需要在这些暴露的方法中加入适当的控制逻辑,即可轻松实现用户对类中属性或方法的不合理操作。
  • 代码可移植性:对类进行良好的封装,还可以提高代码的复用性。

3 具有封装特性的结构:

  • 诸多容器,例如列表、元组、字符串、字典等,它们都是对数据的封装;
  • 函数是对 Python 代码的封装;
  • 类是对方法和属性的封装,也可以说是对函数和数据的封装。
  • 模块是对代码更高级的封装,将代码封装成一个文件,方便其它程序或脚本导入使用。

4 python类如何进行封装

    • 原理:Python 类中的变量和函数,不是公有的(类似 public 属性),就是私有的(类似 private),因此可通过设置类中变量和函数的该属性来实现类的封装
    • 区别:
      • public:公有属性的类变量和类函数,在类的外部、类内部以及子类(后续讲继承特性时会做详细介绍)中,都可以正常访问;
      • private:私有属性的类变量和类函数,只能在本类内部使用,类的外部以及子类都无法使用。
    • 方法:
      • 名称前没有下划线:默认这些python类中的变量和方法都是公有(public)的,可以通过类对象正常访问;
      • 名称以双下划线“__”开头:表示这些python类中的变量和方法都是私有(private)的,只能在类内部使用,在类外部不能通过类对象进行访问;
        • 类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式:
          • 类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果。
          • 这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的。
          • 在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆盖的。
          • 注意:对于这一层面的封装(隐藏),我们需要在类中定义一个函数(接口函数)在它内部访问被隐藏的属性,然后外部就可以使用了。
        • 这种变形需要注意的问题是:
          • 这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N
          • 变形的过程只在类的定义是发生一次,在定义后的赋值操作,不会变形
      • 名称以单下划线“_”开头的类属性和类方法:通常将他们看作私有(private)的,但是它们可以通过类对象正常访问;
      • 名称前后分别以双下划线开头和结尾:这些类方法都是python内部定义的,用于python内部调用,我们自己定义类属性或者类方法时,禁止使用这种形式。

 

rax学习(一):第一个rax应用程序程序HelloWorld

标签:应用   load   native   脚本   npm   loading   模块   script   info   

原文地址:https://www.cnblogs.com/xingguozhiming/p/13466465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!