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

Python类如何基于__init__传入参数动态设置实例变量名称

动态基于传参设置Python类实例变量名的实现方案

这个需求完全可以实现,你原有代码报错的原因是:普通Python类的实例不是字典类型,默认没有实现下标赋值对应的__setitem__魔法方法,不能直接用self[属性名]的方式赋值。

下面是3种可行的实现方式:

  • 方法1:使用内置setattr()函数(最推荐的通用写法)
    setattr(实例对象, 属性名字符串, 属性值)是Python专门用于动态设置对象属性的内置函数,写法如下:
class my_class:
  def __init__(self, var_name):
    # 拼接生成属性名后动态赋值
    setattr(self, f'var{var_name}', var_name)

# 测试示例
obj = my_class("Name")
print(obj.varName) # 输出结果为 Name
  • 方法2:实现__setitem__魔法方法适配你原有的写法
    如果你希望保留self[属性名]的赋值风格,可以给类手动实现__setitem__方法:
class my_class:
  def __init__(self, var_name):
    self['var' + var_name] = var_name
  
  def __setitem__(self, key, value):
    # 下标赋值时内部自动调用setattr设置属性
    setattr(self, key, value)

# 测试示例
obj = my_class("Age")
print(obj.varAge) # 输出结果为 Age
  • 方法3:直接操作实例内置的__dict__属性存储字典
    每个类实例的所有属性都会存储在自带的__dict__字典中,你可以直接修改这个字典新增属性:
class my_class:
  def __init__(self, var_name):
    self.__dict__[f'var{var_name}'] = var_name

# 测试示例
obj = my_class("Score")
print(obj.varScore) # 输出结果为 Score

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:09