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

Python如何将函数参数值作为属性名直接赋值给self

实现方法

可以实现该需求,你需要使用Python内置的setattr()函数完成动态属性赋值,这是处理动态属性设置的标准方案。

针对你的示例代码改写:

class SomeClass:
    def some_function(self, key):
        # 三个参数分别为:目标对象、属性名(字符串类型)、属性值
        setattr(self, key, 1)

# 测试效果
obj = SomeClass()
obj.some_function("custom_attr")
print(obj.custom_attr) # 输出结果为1

批量动态赋值方案

如果你需要像之前用**{key: val}那样批量传参设置属性,可以结合关键字参数遍历实现:

class SomeClass:
    def set_multi_attrs(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

# 测试效果
obj = SomeClass()
obj.set_multi_attrs(**{"name":"test", "age":20, "score":95})
print(obj.name) # 输出test
print(obj.age) # 输出20

注意事项

  • 如果需要避免覆盖实例已有的同名属性,可以先用hasattr()做前置判断:
    def some_function(self, key, value):
        if not hasattr(self, key):
            setattr(self, key, value)
    
  • 也可以直接操作实例的__dict__属性字典实现赋值:self.__dict__[key] = 1,但该方案会跳过属性描述符、@property装饰的setter逻辑,非特殊场景更推荐使用setattr()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:07