我有一个继承自Enum
和str
的类。我需要定义一些类属性,这些属性在.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__)