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

如何通过format构造的类实例属性字符串获取对应值并动态关联变量

动态获取类实例属性并保持关联的解决方案

嘿,我明白你的需求啦——你想通过变量letter动态获取Test实例的对应属性,而且希望当letter修改或者实例属性本身变化时,能直接拿到最新的实际值,而不是靠字符串拼接再执行的方式对吧?

你的原始代码里用字符串拼接生成了类似Test(x='new world').a的语句,但这种方式如果用eval()执行的话,每次都会创建新的实例,不仅没法和同一个实例保持属性关联,还存在安全风险(如果letter是不可信输入的话)。

更合理的做法是先创建实例,再动态获取属性,具体步骤如下:

步骤1:创建Test类的实例

先实例化Test类,这样这个实例是持续存在的,它的属性变化都会被保存下来:

class Test():
    def __init__(self, x='world'):
        self.a = 'hi {}'.format(x)
        self.b = 'hello'
        self.c = 'hey'

# 创建一个实例,后续所有属性操作都基于这个实例
test_instance = Test(x='new world')

步骤2:用getattr()动态获取属性

Python内置的getattr()函数可以根据属性名字符串,直接获取对象的属性值。这样当letter变量修改时,只需要调用getattr()就能拿到对应的最新属性:

letter = 'a'
# 获取对应属性值
word1 = getattr(test_instance, letter)
print(word1)  # 输出: hi new world

# 修改letter,获取另一个属性
letter = 'b'
word2 = getattr(test_instance, letter)
print(word2)  # 输出: hello

# 甚至如果实例属性本身变化了,也能拿到最新值
test_instance.a = 'hi updated world'
letter = 'a'
word3 = getattr(test_instance, letter)
print(word3)  # 输出: hi updated world

为什么这种方式更好?

  • 保持关联:所有操作都基于同一个实例,实例属性的修改会实时反映到后续的获取操作中
  • 安全可靠:避免了使用eval()执行动态字符串带来的安全隐患(比如恶意构造的letter值可能执行危险代码)
  • 简洁高效:不需要每次都拼接字符串,直接通过内置函数就能完成动态属性访问

内容的提问来源于stack exchange,提问作者Ninja Warrior 11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:04