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删除

  • 相关阅读:
    动态规划-数位dp-600. 不含连续1的非负整数
    动态规划-数位dp-1012. 至少有 1 位重复的数字
    动态规划-数位dp-902. 最大为 N 的数字组合
    优先队列-1439. 有序矩阵中的第 k 个最小数组和
    再见
    [JSOI2008]星球大战——并查集+逆向思维
    洛谷p1330 封锁阳光大学(二分图染色)
    快速幂
    最小生成树——联络员 Kruskal
    最小生成树——繁忙的都市
  • 原文地址:https://www.cnblogs.com/leiyiming/p/9194612.html
Copyright © 2011-2022 走看看