Python如何使用类定义的默认属性并支持实例化时自定义覆盖属性值
正确实现代码与原理说明
最简实现方案
class Sales: def __init__(self, id=321): self.id = id
效果验证
- 无需传参的默认场景:
val = Sales() print(val.id) # 输出 321
- 自定义值覆盖的场景:
val = Sales(123) print(val.id) # 输出 123
原代码问题分析
你之前的写法存在两个问题:
- 构造方法
__init__的id参数没有设置默认值,所以实例化时不传参数就会触发参数缺失报错 - 构造方法内的
id=321只是对局部变量id赋值,并没有修改实例属性self.id,所以这行代码完全没有生效,最终实例的id只会取你传入的参数值。
实现原理
Python的方法参数支持设置默认值,调用方法时如果没有传入对应位置的参数,就会自动使用预先设置的默认值。上述方案中给构造方法的id参数设置默认值321,既可以满足无参实例化时使用默认值的需求,也支持传参时优先使用自定义值覆盖默认值。
可选变种方案(适合默认值需要统一管理的场景)
如果后续可能需要统一调整所有实例的默认id值,可以把默认值抽为类属性,修改起来更方便:
class Sales: # 类属性统一管理默认值,修改时只需要改这里即可全局生效 default_id = 321 def __init__(self, id=None): self.id = id if id is not None else self.default_id
内容的提问来源于stack exchange,提问作者Compoot
相关产品推荐
相关产品推荐

