文章目录

  • 一、面向对象三大特性
  • 1、封装 - 继承 - 多态
  • 二、封装
  • 1、封装 - 程序世界 对 现实世界 的描述
  • 2、现实世界中的隐藏属性和行为
  • 3、程序世界中的隐藏属性和行为
  • 4、定义私有成员







一、面向对象三大特性




1、封装 - 继承 - 多态



面向对象三大特性 :

  • 封装 ( Encapsulation ) : 将 数据 和 操作数据的方法 包装在一起 , 隐藏 数据的内部细节 , 防止外界的直接访问和修改 ;
  • 封装后 , 只能通过 对外提供的接口 , 对 封装在内部的属性和方法 进行 访问和操作 ;
  • 继承 ( Inheritance ) : 让 一个 实例对象 获取 另一个 实例对象 的 属性 和 方法 , 在不重写现有代码的基础上实现代码的重用 ;
  • 继承可以 实现出 类的层次结构 , 可以 扩展 现有父类的功能 ;
  • 多态 ( Polymorphism ) : 不同的 实例对象 对 想通的消息 作出不同响应 , 也就是调用想通类型实例对象 的 方法 有不同的行为 ;
  • 多态 通过 方法的 重载 ( Overloading ) 和 虚函数 ( Virtual Function ) 实现 ;
  • 多态 可以 提高代码的 灵活性 和 可维护性 , 使代码更加易于扩展和修改 ;


如果一门编程语言支持 面向对象 思想 , 那么就可以基于 类 创建 实例对象 , 使用 实例对象 实现具体的代码功能 , 同时支持 以上 封装 / 继承 / 多态 三大特性 ;






二、封装




1、封装 - 程序世界 对 现实世界 的描述



封装 ( Encapsulation ) : 将 数据 和 操作数据的方法 包装在一起 , 隐藏 数据的内部细节 , 防止外界的直接访问和修改 ;

  • 封装后 , 只能通过 对外提供的接口 , 对 封装在内部的属性和方法 进行 访问和操作 ;


将 现实世界 的 事物 的

  • 属性
  • 行为

通过描述 , 封装到 程序世界 中 ,

  • 现实世界 事物 属性 封装为 类的 成员变量 ,
  • 现实世界 事物 行为 封装为 类的 成员方法 ,

封装 , 可以实现 程序世界 对 现实世界 事物的描述 ;

【Python】面向对象 - 封装 ① ( 面向对象三大特性 | 封装 - 继承 - 多态 | 封装 - 程序世界 对 现实世界 的描述 | 程序世界中的隐藏属性和行为 | 定义私有成员 )_面向对象

封装代码示例 : 下面的代码 封装了 学生的 属性 和 行为 , 属性有 年龄 和 姓名 , 行为有 说话 ;

# 定义 Python 类
class Student:
    name = None
    age = None

    def say(self):
        print(f"{self.name} is {self.age} years old")



2、现实世界中的隐藏属性和行为



现实世界 中的 事物 , 有很多的 属性 和 行为 , 拿手机举例 :

对用户开放的 属性 和 行为 :

  • 属性 :
  • 品牌
  • 拍照像素
  • 重量
  • 体积
  • 行为 :
  • 打电话
  • 拍照
  • 接收短信

有些 属性 和 行为 不对用户开放 , 属于隐藏的 , 如 :

  • 隐藏属性 :
  • 摄像头驱动型号
  • 主板运行电压
  • 系统管理员权限
  • 隐藏行为 :
  • 内存管理
  • 内核运行
  • 佛波勒监控后门


3、程序世界中的隐藏属性和行为



现实世界 中 , 事物有 隐藏的 属性 和 行为 ,

将 现实世界 中的事物 映射到 程序世界 中 , 类 也有隐藏的 属性 和 行为 ,

  • 隐藏 的 属性 被称为 私有成员变量 ,
  • 隐藏 的 行为 被称为 私有成员方法 ;

隐藏的 属性 和 变量 , 又称为 私有成员 ;



4、定义私有成员



定义私有成员 :

  • 私有成员变量 : 以 双下划线 开头 __私有成员变量名 ;
  • 私有成员方法 : 以 双下划线 开头 __私有成员方法名 ;


下面的代码中 , 定义了 私有成员 :

  • 私有成员变量 :
# 定义私有成员
    __address = None
  • 私有成员方法 :
# 定义私有成员方法
    def __say(self):
        print(f"地址是 {self.__address}")



代码示例 :

"""
面向对象 - 封装
"""


# 定义 Python 类
class Student:
    name = None
    age = None

    # 定义私有成员
    __address = None

    # 定义私有成员方法
    def __say(self):
        print(f"地址是 {self.__address}")

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address