如果我有一堂这样的课:
class MyClass:
ONE = 1
TWO = 2
Run Code Online (Sandbox Code Playgroud)
有没有办法使用反射或其他 Python 功能来简化下面的代码?
def class_value_to_string(my_class_num):
if my_class_num == MyClass.ONE:
return "ONE"
elif my_class_num == MyClass.TWO:
return "TWO"
else:
return "UNKNOWN VALUE"
Run Code Online (Sandbox Code Playgroud)
您可以枚举类的属性并反向查找:
enum_names = {value: name for name, value in vars(MyClass).items() if name.isupper()}
Run Code Online (Sandbox Code Playgroud)
使用它,您可以将值映射回名称。
演示:
>>> class MyClass:
... ONE = 1
... TWO = 2
...
>>> enum_names = {value: name for name, value in vars(MyClass).items() if name.isupper()}
>>> enum_names[1]
'ONE'
Run Code Online (Sandbox Code Playgroud)