一、面向对象三大特性
1、封装 - 继承 - 多态
面向对象三大特性 :
- 封装 ( Encapsulation ) : 将 数据 和 操作数据的方法 包装在一起 , 隐藏 数据的内部细节 , 防止外界的直接访问和修改 ;
- 封装后 , 只能通过 对外提供的接口 , 对 封装在内部的属性和方法 进行 访问和操作 ;
- 继承 ( Inheritance ) : 让 一个 实例对象 获取 另一个 实例对象 的 属性 和 方法 , 在不重写现有代码的基础上实现代码的重用 ;
- 继承可以 实现出 类的层次结构 , 可以 扩展 现有父类的功能 ;
- 多态 ( Polymorphism ) : 不同的 实例对象 对 想通的消息 作出不同响应 , 也就是调用想通类型实例对象 的 方法 有不同的行为 ;
- 多态 通过 方法的 重载 ( Overloading ) 和 虚函数 ( Virtual Function ) 实现 ;
- 多态 可以 提高代码的 灵活性 和 可维护性 , 使代码更加易于扩展和修改 ;
如果一门编程语言支持 面向对象 思想 , 那么就可以基于 类 创建 实例对象 , 使用 实例对象 实现具体的代码功能 , 同时支持 以上 封装 / 继承 / 多态 三大特性 ;
二、封装
1、封装 - 程序世界 对 现实世界 的描述
封装 ( Encapsulation ) : 将 数据 和 操作数据的方法 包装在一起 , 隐藏 数据的内部细节 , 防止外界的直接访问和修改 ;
- 封装后 , 只能通过 对外提供的接口 , 对 封装在内部的属性和方法 进行 访问和操作 ;
将 现实世界 的 事物 的
- 属性
- 行为
通过描述 , 封装到 程序世界 中 ,
- 现实世界 事物 属性 封装为 类的 成员变量 ,
- 现实世界 事物 行为 封装为 类的 成员方法 ,
封装 , 可以实现 程序世界 对 现实世界 事物的描述 ;
封装代码示例 : 下面的代码 封装了 学生的 属性 和 行为 , 属性有 年龄 和 姓名 , 行为有 说话 ;
# 定义 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