为什么Python类变量无需创建对象即可访问,其内存分配机制是什么
类变量无需实例化即可访问的原因
核心逻辑是Python中类本身就是第一类对象,两种变量的绑定对象、绑定时机完全不同:
- 第一个示例中的
a是实例变量,仅绑定在类生成的单个实例对象上
你写在__init__方法里的self.a=first只是预设的初始化逻辑,只有实际执行emp=Employee('John')创建实例时,才会为新生成的实例分配内存,存入a的对应值。没有实例就没有对应的存储位置,此时访问a自然会报错。 - 第二个示例中的
pi是类变量,直接绑定在Emp类对象本身
当Python解释器执行完class Emp: ...这段类定义代码时,就已经生成了Emp类对象,同时会为类作用域内直接定义的pi分配内存、存储3.14这个值。这个过程完全不依赖实例创建,所以你可以直接通过类名访问Emp.pi。
额外补充一个易混淆的点:类变量是该类所有实例共享的,如果你直接修改Emp.pi的值,所有该类已创建、后续创建的实例访问到的pi都会同步变化;只有当你给某个实例单独赋值emp.pi = 3.1415时,才会给这个实例新增一个同名的实例变量,覆盖掉类变量的取值。
内容的提问来源于stack exchange,提问作者Navdeep
相关产品推荐
相关产品推荐

