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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:35:30