2.Python 类的构建
2.Python 类的构建
1. Class
1. class的定义
1 | class <类名每个单词首字母大写>: |
- 类描述:在类定义后的首行,以独立字符串形式定义,
<类名>.__doc__
属性来访问。
2. 初始化方法和self
1 | class <类名>: |
类实例化时所用的方法,可以接收参数并完成初识操作。
__init__
:
- 参数:第一个参数是
self
,表示类实例自身,其它参数是实例参数。 - 返回值:构造方法没有返回值,或者返回
None
,不然TypeError
.
self
: 在类定义内部代表类的实例
self
是Python面向对象约定的一个类参数self
代表类的实例,在类内部,self
用于组合访问实例相关的属性和方法- 相比,类名代表类对象本身
3. 类的属性和方法
- 类的属性:类中定义的变量,用来描述类的一些特性参数
- 类的方法:类中定义且与类相关的函数,用来给出类的操作功能
- 属性和方法是类对外交互所提供的两种接口方式
属性
类属性:类对象的属性,由所有实例对象所共享
实例属性:实例对象的属性,由各实例对象所共享
1
2
3
4class <类名>:
<类属性名> = <类属性初值>
def __init__(self, [参数列表]):
self.<实例属性名> = <实例属性初值>类属性实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class PeopleClass:
init_num = 0
def __init__(self, name, age):
self.name = name
self.age = age
PeopleClass.init_num += 1
p1 = PeopleClass("Tom", 23)
p2 = PeopleClass("Jack", 24)
print("类总数:", PeopleClass.init_num)
print(p1.name, p2.name)
>>
类总数: 2
Tom Jack每次实例化,都会调用
__init__
方法,那么累变量改变为2,因此类属性也为2。属性是类内部定义的变量
- 类属性:类对象的属性,有所有实例对象所共享
- 访问:<类名>.<类属性> 或 <对象名>.<类属性>
- 实例属性:实例对象的属性,由各实例对象所独享
- 访问:<对象名>.<实例属性>
- 类属性:类对象的属性,有所有实例对象所共享
方法
方法是类内部定义的函数
- 实例方法:实例对象的方法,由各实例对象独享,最常用的形式
- 类方法: 类对象的方法,由所有实例对象共享
- 自由方法:类中的一个普通函数,由类所在命名空间管理,类对象独享
- 静态方法:类中的一个普通函数,由类对象和实例对象共享
- 保留方法: 由双下划线开始和结束的方法,保留使用,如
__len__()
实例方法
1 | class <类名>: |
实例方法采用<对象名>.<方法名>([参数列表])方式使用
类方法
l 类方法是与类对象相关的函数,由所有实例对象共享
1 | class <类名>: |
类方法采用<类名>.<方法名>([参数列表]) 或<对象名>.<方法名>([参数列表])方式使用。
- 类方法至少包含一个参数,表示类对象,一般用
cls
@classmethod
是装饰器,类方法定义所必须- 类方法只能操作类属性和其他类方法,不能操作实例属性和实例方法
自由方法
自由方法是定义在类命名空间中的普通函数
1 | class <类名>: |
自由方法采用<类名>.<方法名>([参数列表]) 方式使用。<类名>表示命名空间。
- 自由方法不需要
self
、cls
这类参数,可以没有参数 - 自由方法只能操作类属性和类方法,不能操作实例属性和实例方法
- 自由方法的使用只能使用<类名>
静态方法
静态方法是定义在类中的普通函数,能够被所有实例对象共享
1 | class <类名>: |
静态方法采用<类名>.<方法名>([参数列表]) 或<对象名>.<方法名>([参数列表])方式使用。
- 静态方法可以没有参数,可以理解为定义在类中的普通函数
- @staticmethod是装饰器,静态方法定义所必须
- 静态方法只能操作类属性和其他类方法, 不能操作实例属性和实例方法
- 相比自由方法,静态方法能够使用类名和对象名两种操作方式使用
4. 类的析构函数
1 | class <类名>: |
析构函数在真实删除实例对象是被调用。
- 函数名和参数:Python解释器内部约定,保留方法
- 调用条件:当实例对象被真实删除是,才调用该函数内语句
- 真实删除:当前对象的引用次数为0或当前程序退出(垃圾回收机制)
Python类的内存管理
- 实例对象:真实创建的对象,分配对象内存
- 实例引用:实例的指针,仅分配指针内存
内存管理机制:
在删除对象前,Python解释器会检查引用次数
引用次数不为0,则仅删除当前引用;0,则删除对象
如果程序退出,则由垃圾回收机制删除对象
利用
sys.getrefcount(<对象名>)
获取对象引用次数,其返回值为被引用值+1.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 aigonna!
评论