先说结论:
1、类变量属于类所有,建议引用时使用类名引用,形如 cls.attr
。也可以使用实例引用 self.attr
。
- 直接修改类变量。各实例未自行修改类变量时,引用到的值都会改变
- 如果在实例中对类变量赋值,会复制一份为实例变量。覆盖了类变量
- 通过实例引用类变量会比较慢
2、实例变量属于实例所有,引用方式形如 self.attr
代码示例如下:
class TestClass:
project_id: str = "类变量"
cluster_id: Optional[str] = None
def __init__(self):
self.count = 1
# 类变量 当使用实例变量进行类变量赋值之后,就在实例中重新生成了一份变量
if __name__ == "__main__":
test_obj1 = TestClass()
test_obj2 = TestClass()
# 实例变量
print("实例变量:")
print(f"修改前,test_obj1实例变量count内存地址: {
id(test_obj1.count)},值:{
test_obj1.count}")
print(f"修改前,test_obj2实例变量count内存地址: {
id(test_obj2.count)},值:{
test_obj2