如何通过变量传参为__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)
效果测试
- 传入自定义
age的场景:
Rohan = emp("Rohan", "foo", age=12, nationality="Indian") print(Rohan.age) # 输出:12
- 用默认值的场景:
注意:你示例中写的
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
相关产品推荐
相关产品推荐

