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

如何将字符串转为类属性变量名?self识别问题求解

问题解决:动态给类实例添加属性

你的问题出在**vars()不带参数时,操作的是当前函数的局部命名空间,不是实例的属性字典**。你写的vars()[f'self.table{1}']=10只是在__init__的局部变量里存了一个键为"self.table1"的变量,根本没给self实例添加属性,自然会报找不到table1的错误。

下面是两种正确的实现方式:

方法1:使用setattr()(推荐)

setattr()是Python专门用来动态设置对象属性的内置函数,用法简单且规范:

class Myclass:
    def __init__(self):
        setattr(self, f'table{1}', 10)
    def run(self):
        print(self.table1)

myclass = Myclass()
myclass.run()  # 输出:10

方法2:直接操作实例的__dict__

每个实例的属性都存储在自身的__dict__字典中,你可以直接修改这个字典来添加属性:

class Myclass:
    def __init__(self):
        self.__dict__[f'table{1}'] = 10
    def run(self):
        print(self.table1)

myclass = Myclass()
myclass.run()  # 输出:10

补充:为什么原来的vars()、locals()、globals()不行?

  • vars()无参数时等价于locals(),返回当前函数的局部变量字典,和实例属性无关;如果想获取实例的属性字典,应该用vars(self),改成vars(self)[f'table{1}']=10也能实现需求,效果和操作__dict__类似。
  • globals()返回的是全局命名空间,和实例属性完全不相关。

内容的提问来源于stack exchange,提问作者Zouzou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:12:04