Python如何通过字符串参数访问类对象的属性?
通过字符串参数访问并修改类对象的属性
你的需求完全可行,问题出在直接用.访问属性的方式——myObject.parameter会试图访问名为parameter的属性,而不是用变量parameter里的字符串作为属性名。Python提供了getattr()函数来解决这个问题,它能通过字符串获取对象的属性引用,所以不仅能读取值,还能直接修改属性本身。
基础读取示例(修复你的MWE)
修改后的代码可以正确打印指定属性:
class myClass(): def __init__(self): self.one = "Test" self.two = "Plop" def myFunction(parameter): # 使用getattr通过字符串获取属性 attr = getattr(myObject, parameter) print(attr) myObject = myClass() myFunction("one") # 输出: Test
修改属性的示例(支持列表追加等操作)
如果属性是可变类型(比如列表),直接通过getattr()拿到的引用就能修改原对象的属性;如果是不可变类型(比如字符串),可以搭配setattr()完成赋值更新:
class myClass(): def __init__(self): self.one = "Test" self.two = ["a", "b"] def operate_attr(obj, attr_name, new_value=None): attr = getattr(obj, attr_name) # 列表类型追加元素 if isinstance(attr, list): attr.append(new_value) # 普通属性直接赋值更新 else: setattr(obj, attr_name, new_value) myObject = myClass() operate_attr(myObject, "two", "c") print(myObject.two) # 输出: ['a', 'b', 'c'] operate_attr(myObject, "one", "Updated Test") print(myObject.one) # 输出: Updated Test
核心函数说明:
getattr(obj, attr_name):获取对象obj中名为attr_name(字符串)的属性引用setattr(obj, attr_name, value):给对象obj的attr_name属性赋值为value
内容的提问来源于stack exchange,提问作者AlMa
相关产品推荐
相关产品推荐

