类属性和类方法
目标
- 类的结构
- 类属性和实例属性
- 类方法和静态方法
1. 类的结构
1.1 术语–实例
- 在面向对象开发过程中,第一步就是需要设计 类 。
- 第二步,使用 类名() 创建对象,创建对象分为两步:
- 在内存中为对象 分配空间;
- 调用初始化方法
__init__
为对象初始化。
- 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 。
因此,通常也会把:- 创造出来的 对象 叫做 实例 。
- 创作对象的 动作 叫做 实例化 。
- 对象的 属性 叫做 实例属性 。
- 对象的 方法 叫做 实例方法 。
在程序执行时:
- 对象各自拥有自己的 实例属性 。
- 调用对象的方法,可以通过
self
:- 访问自己的属性
- 调用自己的方法
结论
- 每一个对象 都有自己 独立的内存空间,保存各自不同的属性
- 多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用 传递到方法内部
1.2 类是一个特殊的对象
Python 中的一切都是对象:
class AAA(object)
:定义的类属于类对象。object_one = AAA()
: 这个是实例对象。
注意:
- 在程序运行时,类 同样 会被加载到内存
- 在程序运行时,类对象 在内存中 只有一份,使用 一个类 可以创建出 很多个对象实例
- 除了封装 实例 的 属性 和 方法外,类对象 还可以拥有自己的 属性 和 方法:
- 类属性
- 类方法
- 通过 类名. 的方式可以 访问 类的属性 或者 调用类的方法 。
2. 类属性和实例属性
2.1 概念和使用
- 类属性 就是给 类对象 中定义的 属性,通常用来记录 与这个类相关 的特征
- 类属性 不会用于记录 具体对象的特征
示例需求
- 定义一个 动物类
- 每种动物都有自己的
name
- 需求——知道使用这个类,创建了多少种动物?
class Animals(object):
# 使用赋值语句,定义类属性,记录创建动物对象的总数
count = 0
def __init__(self, name):
self.name = name
# 针对类属性做一个计数
Animals.count += 1
# 创建动物类
dog = Animals('狗')
cat = Animals('猫')
snake = Animals('蛇')
# 知道使用 Animals 类到底创建了多少个对象?
print('现在创建了 %d 个对象' % Animals.count)
# 这里也可以使用 对象.类属性 打印对象个数,但是不推荐,下文进行讲解
结果输出:
现在创建了 3 个对象
2.2 属性的获取机制
- 在
Python
中,属性的获取 存在一个 向上查找机制
- 因此,要访问类属性有两种方式:
- 类名.类属性
- 对象.类属性 (不推荐)
注意
- 如果使用
对象.类属性 = 值
赋值语句,只会 给对象添加一个属性,而不会影响到 类属性的值。