如何在Python预定义类中动态创建运行时确定名称的类属性?
运行时给Python类动态添加类属性
你之前用globals()[x]=''操作的是全局命名空间,所以才会生成全局变量。要给类添加属性,得直接操作类本身的属性集合,这里给你两种实用方法:
方法一:在类的方法里用setattr(推荐)
setattr是Python专门用来动态设置对象属性的内置函数,直接指定类对象、属性名和值就行:
class Test: def __init__(self, x): # 给Test类添加名为x的属性,值为空字符串 setattr(Test, x, '')
测试一下效果:
# 创建实例时传入要添加的类属性名 obj = Test("dynamic_class_attr") # 直接通过类访问这个动态属性 print(Test.dynamic_class_attr) # 输出:'' # 所有实例都能共享这个类属性 another_obj = Test("second_attr") print(Test.second_attr) # 输出:''
方法二:直接操作类的__dict__属性
每个类都有__dict__字典存储它的属性,也可以直接往里面加键值对,但这种方式不如setattr规范,偶尔用用也可以:
class Test: def __init__(self, x): Test.__dict__[x] = ''
额外说明:区分类属性和实例属性
如果你是想给单个实例加属性(不是所有实例共享的类属性),那把Test换成self就行:
class Test: def __init__(self, x): setattr(self, x, '')
这种情况下,每个实例的属性是独立的,不会影响其他实例或类本身。
内容的提问来源于stack exchange,提问作者Vishnu Balaji
相关产品推荐
相关产品推荐

