首页 > 解决方案 > 用于命名字符串常量的 Python 构造

问题描述

我经常使用字符串常量,例如:

DICT_KEY1 = 'DICT_KEY1'
DICT_KEY2 = 'DICT_KEY2'
...

很多时候我不介意实际的文字是什么,只要它们是独特的并且对人类读者来说是可以理解的。这样更容易在整个项目中重构和更改文字。

所以我的问题是,有没有一种标准方法可以让这些字符串常量声明更简单?我不想重复写文字'DICT_KEYn'

例如,这样的事情可以工作:

@string_consts
class DictKeys:
    DICT_KEY1: str
    DICT_KEY2: str
    ...

assert DictKeys.DICT_KEY1 == 'DICT_KEY1'

标签: python

解决方案


如果有帮助,您的string_consts装饰器的实现将是

def string_consts(cls):
    for key, value in cls.__annotations__.items():
        if value is str:
            setattr(cls, key, key)
    return cls

这使得

@string_consts
class DictKeys:
    DICT_KEY1: str
    DICT_KEY2: str

assert DictKeys.DICT_KEY1 == 'DICT_KEY1'

如您的示例工作OOTB。


推荐阅读