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
相关产品推荐
相关产品推荐

