Python:将常量的值转换为常量的名称

Tho*_*son 5 python reflection

如果我有一堂这样的课:

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)

Mar*_*ers 4

您可以枚举类的属性并反向查找:

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)