本文详解 Python 中实例变量与类变量的区别,说明为何子类无法默认共享父类 __init__ 中定义的变量,并提供使用类变量实现跨实例共享的正确方法。
本文详解 python 中实例变量与类变量的区别,说明为何子类无法默认共享父类 `__init__` 中定义的变量,并提供使用类变量实现跨实例共享的正确方法。
在 Python 面向对象编程中,一个常见误区是认为在父类 __init__ 中初始化的属性(如 self.shared_variable)天然具有“共享性”。实际上,该变量是每个实例独享的实例变量(instance variable),而非所有实例共用的类变量(class variable)。因此,当你调用 child1_instance.change_variable("New value from Child1") 时,仅修改了 child1_instance 自身的 shared_variable 属性;而 child2_instance 拥有独立副本,其值保持不变。
要实现真正的跨实例共享(即所有 Parent 及其子类实例读取同一份数据),必须将变量定义为类变量——即在类体顶层、方法外部直接声明:
class Parent:
shared_variable = "I am a shared variable" # ✅ 类变量:所有实例共享
class Child1(Parent):
def change_variable(self, new_value):
Parent.shared_variable = new_value # ✅ 正确:修改类变量本身
class Child2(Parent):
pass⚠️ 注意:务必使用 Parent.shared_variable = ... 而非 self.shared_variable = ...。后者会在当前实例上创建同名的实例变量,遮蔽(shadow)类变量,导致共享失效。
验证效果:
立即学习“Python免费学习笔记(深入)”;
child1 = Child1()
child2 = Child2()
print(child1.shared_variable) # 输出: I am a shared variable
print(child2.shared_variable) # 输出: I am a shared variable
child1.change_variable("New value from Child1")
print(child1.shared_variable) # 输出: New value from Child1
print(child2.shared_variable) # 输出: New value from Child1 ✅ 共享生效补充说明:若需为特定子类分支(如仅 Child1 及其后代)定制共享变量,可为子类单独定义类变量(如 Child1.shared_variable = ...),此时该变量作用域限于该子类继承链。但绝大多数场景下,统一操作 Parent.shared_variable 是最清晰、最符合预期的设计方式。


















