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

Python如何简化通过kwargs批量赋值属性的__init__初始化方法

方案1:遍历固定属性列表赋值(最稳妥,兼容性最好)

这种写法既减少了重复的赋值代码,又不会引入多余的实例属性,后续要增删需要赋值的属性,只需要修改required_attrs列表即可,适配所有Python版本:

def __init__(self,**kwargs):
    required_attrs = ["ServiceNo", "Operator", "NextBus", "NextBus2", "NextBus3"]
    for attr in required_attrs:
        setattr(self, attr, kwargs[attr])

方案2:用dataclass省略手写__init__(Python 3.7+ 推荐)

如果你的类主要作用是存储这几个属性,没有复杂的初始化逻辑,用标准库的dataclass可以完全省去手写赋值逻辑,还自带__repr__、__eq__等常用方法:

from dataclasses import dataclass

# 所有属性的类型标注可以根据实际业务修改,不需要严格校验的话也可以直接写Any
@dataclass
class BusService: # 替换为你自己的类名即可
    ServiceNo: str
    Operator: str
    NextBus: object
    NextBus2: object
    NextBus3: object

实例化的时候直接传入关键字参数就行:bus = BusService(**kwargs),和你之前的初始化逻辑完全兼容。

不推荐的简化写法

你可能见过self.__dict__.update(kwargs)的写法,虽然代码更短,但会把kwargs中所有的键值对都赋值为实例属性,如果kwargs存在预期外的参数,会污染实例的命名空间,后续排查问题成本很高,除非你能100%确保kwargs只有你需要的5个属性,否则不建议使用。

内容的提问来源于stack exchange,提问作者Fishball Nooodles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:01