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

如何通过变量传参为__init__方法添加自定义属性及设置默认值

错误原因

你定义的__init__方法仅接收a、b两个入参,没有处理额外关键字参数的逻辑,因此传入age、nationality这类未声明的关键字参数时,会抛出unexpected keyword argument类型错误。

实现方案

方案1:支持任意自定义额外参数,可预设默认值

如果你后续可能会灵活新增属性,不需要限制传入的额外参数范围,可以用**kwargs捕获所有额外关键字参数,再绑定到实例上,同时支持预设默认值:

class emp:
    # 提前定义额外属性的默认值,可按需增删
    _default_attrs = {
        "age": 5,
        "nationality": "Indian"
    }
    def __init__(self, a, b, **kwargs):
        self.first_name = a
        self.last_name = b
        # 先加载预设默认值
        for attr, default_val in self._default_attrs.items():
            setattr(self, attr, default_val)
        # 用传入的自定义参数覆盖默认值
        for attr, val in kwargs.items():
            setattr(self, attr, val)

效果测试

  1. 传入自定义age的场景:
Rohan = emp("Rohan", "foo", age=12, nationality="Indian")
print(Rohan.age)  # 输出:12
  1. 用默认值的场景:

注意:你示例中写的Jhonny=emp(age=,nationality='')是不合法的Python语法,参数赋值不能留空。如果要使用默认值,直接不传对应参数即可。

# 不传入age、nationality,自动使用预设默认值
Jhonny = emp("Jhonny", "bar")
print(Jhonny.age)  # 输出默认值:5
print(Jhonny.nationality)  # 输出默认值:Indian

# 也可以单独修改属性值
Jhonny.age = 20
print(Jhonny.age)  # 输出:20

方案2:固定属性范围,避免无效参数传入

如果属性是固定的,不想允许用户传入未定义的参数,可以直接在__init__参数里声明属性和默认值:

class emp:
    def __init__(self, a, b, age=5, nationality="Indian"):
        self.first_name = a
        self.last_name = b
        self.age = age
        self.nationality = nationality

该方案的使用效果和方案1一致,额外传入未声明的参数时会直接抛出错误,适合属性固定的场景。


内容的提问来源于stack exchange,提问作者Pratyush Arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:27:05