正在设置字典中的类属性

  • 本文关键字:属性 字典 设置 python
  • 更新时间 :
  • 英文 :


我有一个继承自Enumstr的类。我需要定义一些类属性,这些属性在.json文件中定义,并加载到Python字典中。

from enum import Enum
# I want to create a class like this (but assign the class attributes by reading a dict)
class Test(str, Enum):
A = 'Alpha'
B = 'Beta'
# Attempt to solve :
mydict = { 'A' : 'Alpha', 'B' : 'Beta' }
class Test1(str, Enum):
for k,v in mydict.items():
k = v
# => An Error is reported here.

对于类实例,我可以使用setattr(),但找不到任何东西来设置类属性。

由于这些属性是动态的并且可以更改,所以我不想硬编码类属性,而是在字典中读取并设置它

不要直接定义自己的类,而是使用Enum函数API:

Test = enum.Enum("Test", mydict, type=str)

您也可以将setattr()用于类:

>>> class A: 
...     pass
...
>>> setattr(A, "attribute", 3)
>>> inst = A()
>>> inst.attribute
3

只需迭代如下dict:

for k, v in mydict.items():
setattr(Test, k, v)

要使动态,您可以在__new__魔术函数下设置所有属性。这里有一个例子:

attr_dict ={
'A': 'alpha',
'B': 'beta'
}
class MyClass:
def __new__(cls, *args, **kwargs):
for k, v in attr_dict.items():
setattr(cls, k, v)
return cls
x = MyClass()
x.A  # --> 'alpha'
x.B  # --> 'beta'

这个答案应该会对您有所帮助。

来自答案:

Python 3

for k, v in mydict.items():
exec("%s=%s" % (k,v))

这听起来不像是一种好的做法,但很有效。

Python 3

class MyClass:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)

attr_dict ={
'A': 'alpha',
'B': 'beta'
}

my_class = MyClass(**attr_dict)
print(my_class.__dict__)