DAY 4. 类变量(属性)和实例变量(属性)
- 类变量:在所有类的实例之间都可以共享的变量,类变量在所有对象间只保留一份
- 在类体中定义
- 类的所有实例对象都可以访问类变量
- 类变量只能由类修改,实例对象只有读权限
- 使用
对象名.类变量名 = new value不是在使用对象修改类属性,而是给对象添加了一个新属性
class Demo:
# 类变量
classVar = 0
def __init__(self):
self.instanceVar = 1
if __name__ == '__main__':
demo1 = Demo()
demo2 = Demo()
# 类的所有实例对象都可以访问类变量
print(demo1.classVar) # 0
print(demo2.classVar) # 0
# 由类修改类变量
Demo.classVar = 2
print(demo1.classVar) # 2
print(demo2.classVar) # 2
# 注意,这样不是在修改类变量,而是给实例对象添加了一个属性
demo1.classVar = 2
print(demo1.classVar) # 2
- 实例变量:实例化对象时,每个对象都会有自己的实例变量,各实例变量之间不影响
- 在构造函数中定义
- 实例变量由实例对象修改,类修改实例变量没意义
- 每个实例对象有一份实例变量
class Demo:
# 类变量
classVar = 0
def __init__(self):
# 实例变量
self.instanceVar = 1
if __name__ == '__main__':
print(demo1.instanceVar) # 1
print(demo2.instanceVar) # 1
# 各实例对象间的实例变量互相不影响
demo1.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
# 用类修改实例变量没意义
Demo.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
4.1 总结
| 变量(属性) | 定义 | 读取 | 修改 | 内存 |
|---|---|---|---|---|
| 类变量 | 在类体中定义 | className.classVar和objectName.classVar | className.classVar = new value | 只保留一份 |
| 实例变量 | 在构造函数中定义 | objectName.instanceVar | objectName.instanceVar = new value | 每个实例对象保存一份,各对象间互不影响 |
**注意:**使用
objectName.classVar = new value是给对象添加了一个新属性
参考文章:
本文聚焦Python中类变量和实例变量。类变量在类体中定义,在所有类的实例间共享,只有类可修改;实例变量在构造函数中定义,每个实例对象有自己的实例变量,由实例对象修改。还提醒使用时可能给对象添加新属性。
和实例变量(属性&spm=1001.2101.3001.5002&articleId=95934888&d=1&t=3&u=dece2c170c5f4278829fe472840363e1)
859

被折叠的 条评论
为什么被折叠?



