3. 类的封装
3. 类的封装
1. 封装Encapsulation
封装是属性和方法的抽象。
- 属性的抽象:对类的属性(变量)进行定义、隔离和包护
- 方法的抽象:对类的方法(函数)进行定义、隔离和包护
- 目标是形成一个类对外可操作属性和方法的接口
graph LR A((类CLass))--> B(属性 Attributes) A --> C(方法 Methods)
属性:
- 私有属性:只能在类内部访问
- 公有属性:可以通过类、对象名访问
方法:
- 公有方法:只能在类内部使用
- 公开方法:可以通过类、对象名访问
2. 私有类属性和公开类属性
私有属性:仅供当前类访问的类属性,子类也不能访问。
1 | class <类名>: |
私有类属性名开始需要有两个下划线__
,如 __count
。
- 只能在类的内部被方法所访问
- 不能通过<类名>.<属性名> 或 <对象名>.<属性名>方式访问
- 有效保证了属性维护的可控性
公开类属性:即类属性
1 | class <类名>: |
3. 公开实例属性和私有实例属性
公开实例属性:即实例属性
1 | class <类名>: |
私有实例属性:仅供当前类内部访问的实例属性,子类也不能访问
1 | class <类名>: |
私有实例属性名开始需要有两个下划线__
,如__name
.
- 只能在类的内部被方法所访问
- 不能通过<类名>.<属性名> 或 <对象名>.<属性名>方式访问
- 有效保证了属性维护的可控性
4.私有方法和公开方法
私有方法:
1 | class <类名>: |
私有方法名开始要有2个下划线__
,如__getCount()
.
- 各类方法都可以通过增加双下划线变为私有方法
- 私有方法从形式上保护了Python类内部使用的函数逻辑
- 私有与公有是程序员逻辑,不是安全逻辑,重视约定
5. 类的保留属性和保留方法
保留属性:也叫特殊属性,Special Attributes。
- 特点:以双下划线开头和结尾。
- 作用:为理解Python类提供统一的属性接口
- 属性值:具有特定含义,类定义后直接使用
保留属性 | 描述 |
---|---|
__name__ |
类的名称 |
__qualname__ |
以.分隔从模块全局命名空间开始的类名称 |
__bases__ |
类所继承的基类名称 |
<类>.__dict__ |
包含类成员信息的字典,key是属性和方法名称,value是地址 |
<对象>.__dict__ |
包含对象属性信息的字典,key是属性名称,value是值 |
__class__ |
对象所对应的类信息,即type信息 |
__doc__ |
类描述,写在类定义下的首行字符串,不能继承 |
__module__ |
类所在模块的名称 |
保留方法:
也叫特殊方法,Special Methods
- 特点:以双下划线开头和结尾。
- 作用:为操作Python类提供统一的属性接口
- 方法逻辑:具有特定含义,一般与操作符关联,类定义需要重载。
保留方法 | 对应操作 |
描述 |
---|---|---|
obj.__init__() |
obj=ClasssName() |
初始化实例对象的函数逻辑 |
obj.__del__() |
del obj |
删除实例对象 |
obj.__repr__() |
repr(obj) |
定义对象可打印字符串的函数逻辑 |
obj.__str__() |
str(obj) |
定义对象字符串转换操作的逻辑函数 |
obj.__bytes__() |
bytes(obj) |
定义对象字节串转换操作的函数逻辑 |
obj.__format__() |
obj.format() |
定义对象格式化输出的函数逻辑 |
obj.__hash_() |
hash(obj) |
定义对象哈希操作的函数逻辑 |
obj.__bool__() |
bool(obj) |
定义对象布尔运算的函数逻辑 |
obj.__len__() |
len(obj) |
定义对象长度操作的函数逻辑 |
obj.__reversed__() |
obj.reversed() |
定义对象逆序的函数逻辑 |
obj.__abs__() |
abs(obj) |
定义对象绝对值操作的函数逻辑 |
obj.__int__() |
int(obj) |
定义对象整数转换的函数逻辑 |
dir(obj)
查看对象所有的属性和方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 aigonna!
评论