如何根据特定字符串变量的值为Python类实例对应属性赋值
动态为类实例属性赋值的规范实现
你需求的场景应该使用Python内置的setattr()函数实现,这是官方推荐的标准写法,不要直接操作实例的__dict__属性。
修改后的完整代码
class My_Class(): def __init__(self): self.value1 = '' self.value2 = '' def main(): var1 = 'value1' c1 = My_Class() # 替换原来的__dict__操作 setattr(c1, var1, 'string') if __name__ == '__main__': main()
不推荐直接操作__dict__的原因
直接访问__dict__属于操作实例的内部存储结构,存在多个问题:
- 违反封装原则:
__dict__是Python类实例的内部实现细节,不属于公开API,不同版本或者特殊类的实现可能有差异 - 兼容性差:如果类定义了
__setattr__钩子方法、使用@property装饰器定义属性、或者声明了__slots__没有预留__dict__空间,直接修改__dict__要么不生效要么直接报错 - 可读性低:其他维护者需要额外理解你操作内部字典的意图,不如
setattr语义明确
拓展用法
如果需要先校验目标属性是否存在,避免给类实例新增意料之外的属性,可以配合hasattr()使用:
if hasattr(c1, var1): setattr(c1, var1, 'string') else: raise ValueError(f"实例不存在属性{var1}")
内容的提问来源于stack exchange,提问作者jaried
相关产品推荐
相关产品推荐

