You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何使用类定义的默认属性并支持实例化时自定义覆盖属性值

正确实现代码与原理说明

最简实现方案

class Sales:
    def __init__(self, id=321):
        self.id = id

效果验证

  • 无需传参的默认场景:
val = Sales()
print(val.id) # 输出 321
  • 自定义值覆盖的场景:
val = Sales(123)
print(val.id) # 输出 123

原代码问题分析

你之前的写法存在两个问题:

  1. 构造方法__init__的id参数没有设置默认值,所以实例化时不传参数就会触发参数缺失报错
  2. 构造方法内的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:54:03