类属性属于类、被所有实例共享,实例属性属于对象、各实例独立;类属性定义在class内方法外,实例属性通过self在__init__中定义;避免用可变对象作类属性默认值。

类属性和实例属性在Python中作用不同,关键区别在于归属对象和生命周期:类属性属于类本身,所有实例共享;实例属性属于具体对象,每个实例独立拥有。
类属性:定义在类内部、方法外部的变量
类属性在类定义时创建,被该类所有实例共同引用。修改类属性会影响所有未覆盖该属性的实例。
- 适合存储常量、配置项、计数器等全局性数据,比如类名、版本号、默认超时时间
- 定义方式:直接写在class代码块里,不在任何def下,例如
count = 0 - 访问方式:可通过类名(
MyClass.count)或实例(obj.count)读取;但用实例修改会**意外创建同名实例属性**,不再影响类属性
实例属性:在__init__或实例方法中通过self绑定的变量
实例属性在对象创建(调用__init__)时生成,每个实例一份独立副本,互不干扰。
- 适合保存对象独有的状态信息,比如用户ID、缓存数据、临时标记
- 定义方式:必须用
self.xxx = value形式,常见于__init__中 - 访问方式:只能通过实例(
obj.name),类名直接访问会报错(除非类也定义了同名类属性)
常见混淆点与避坑建议
很多bug源于误把可变类属性当实例属性用,尤其列表、字典这类可变对象。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~