zoukankan      html  css  js  c++  java
  • 封装

    封装

    封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
    所以,在使用面向对象的封装特性时,需要:

    1. 将内容封装到某处
       class Person:
           Ethnicity = 'human'
           def __init__(self, name, age):
               self.name = name
               self.age = age
           def study(self, book):
               print('%s is studying %s' % (self.name, book))
       jack = Person('jack', 18)
      
      • 这里的Person类定义了name、age属性,study方法
      • 将Person实例化为jack,并将name、age属性,study方法封装进了jack
    2. 从某处调用被封装的内容
       print('%s is %s years.' % (jack.name, jack.age))
       jack.study('python')
      
      • jack对象看起来什么都没有定义,其实在Person类实例化为jack的时候就已经将定义好的属性和方法封装进jack对象了,所以直接就能使用
    3. 封装分两类
      • 数据封装,将数据封装到对象中
        • 上文中的Person类定义了name、age属性
      • 封装方法和属性,将一类操作封装到一个类中
        • 上文中的Person类定义了study方法,使得Person的对象都具有相同方法
        • 覆盖
    4. 封装之隐藏
      在方法,属性前加下划线进行隐藏,在类定义时,对下划线开头的属性进行变形_class_type,这样得到简单的数据隐藏

      这种变形的特点:
      1,在类外部无法直接obj._attrName
      2,在类内部是可以直接使用obj._AttrName
      3, 子类无法覆盖父类_开头的属性

      保护对象的属性:

      如果有一个对象,当需要对其进行修改属性时,有2种方法

      • 对象名.属性名 = 数据 ---->直接修改
      • 对象名.方法名() ---->间接修改

      为了更好的保存属性安全,即不能随意修改,一般的处理方式为

      • 将属性定义为私有属性
      • 添加一个可以调用的方法,供调用

      封装数据属性:明确的区分内外,

      property的使用
      将一些要通过计算才能得到的属性,伪造成数据属性
      在定义函数方法的前面加@property,方法加return返回值,使用者可以像使用属性方法那样调用函数方法,即不加括号就能得到数据
      定义多个相同方法的删改查操作操作
      @property
      @property.setter修改
      @property.deleter删除

  • 相关阅读:
    Fault-Tolerant Virtual Machine 论文笔记
    Google File System 论文笔记
    Amazon Aurora 论文笔记
    MATLAB入门学习(二):分支语句和编程设计
    MATLAB入门学习(一):基础准备
    矩阵连乘问题
    合并排序 java
    生产者与消费者 代码实现 java
    图的封装(C++)
    二叉树的封装
  • 原文地址:https://www.cnblogs.com/leiyiming/p/9194612.html
Copyright © 2011-2022 走看看