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
相关产品推荐
相关产品推荐

