如何将Python字典转换为类的类变量?
把字典键值对转为Python类的类变量
要实现将字典内容直接转为类的类变量,你可以用以下几种简单方法:
方法1:直接更新类的__dict__
定义类后,直接通过类的__dict__属性更新字典内容,这样字典里的键值对会直接变成类的类变量:
my_dict = {'key1': 'value1', 'key2': 'value2'} class A: # 这里可以放你原本的类变量,比如: start_date = 202219 time = 0 back_fall = {} # 将字典内容合并到类的属性中 A.__dict__.update(my_dict) # 验证访问 print(A.key1) # 输出: value1 print(A.start_date) # 输出: 202219
方法2:用type()动态创建类
type()函数可以直接创建类,第三个参数就是类的命名空间字典,直接把你的字典传进去就行,适合从头创建类的场景:
my_dict = {'key1': 'value1', 'key2': 'value2'} # 如果有额外的类变量,直接合并字典 extra_vars = {'start_date': 202219, 'time': 0, 'back_fall': {}} combined_vars = {**my_dict, **extra_vars} # 动态创建类A A = type('A', (), combined_vars) # 验证访问 print(A.key2) # 输出: value2 print(A.time) # 输出: 0
方法3:用类装饰器批量添加类变量
如果需要给多个类添加字典里的变量,类装饰器会更灵活:
def add_class_vars(dictionary): def wrapper(cls): cls.__dict__.update(dictionary) return cls return wrapper my_dict = {'key1': 'value1', 'key2': 'value2'} @add_class_vars(my_dict) class A: start_date = 202219 time = 0 back_fall = {} # 验证访问 print(A.key1) # 输出: value1
为什么你之前的方法不行?
globals().update(my_dict)是把变量加到全局命名空间,和类的命名空间完全独立,自然没法通过A.key1访问;- 继承的方法是在实例
self上添加属性,属于实例变量而非类变量,所以必须通过B.a这个实例来访问,不符合你的需求。
内容的提问来源于stack exchange,提问作者mannar-senpai
相关产品推荐
相关产品推荐

