我经常使用字符串常量,例如:
DICT_KEY1 = 'DICT_KEY1'
DICT_KEY2 = 'DICT_KEY2'
...
Run Code Online (Sandbox Code Playgroud)
很多时候我并不介意实际的文字是什么,只要它们对人类读者来说是独一无二的并且可以理解的。通过这种方式,可以更轻松地在整个项目中重构和更改文字。
所以我的问题是,是否有一种标准方法可以使这些字符串常量声明更简单?我不想重复写文字'DICT_KEYn'。
例如,这样的事情可以工作:
@string_consts
class DictKeys:
DICT_KEY1: str
DICT_KEY2: str
...
assert DictKeys.DICT_KEY1 == 'DICT_KEY1'
Run Code Online (Sandbox Code Playgroud)
如果有帮助,您的string_consts装饰器的实现将是
def string_consts(cls):
for key, value in cls.__annotations__.items():
if value is str:
setattr(cls, key, key)
return cls
Run Code Online (Sandbox Code Playgroud)
这使得
@string_consts
class DictKeys:
DICT_KEY1: str
DICT_KEY2: str
assert DictKeys.DICT_KEY1 == 'DICT_KEY1'
Run Code Online (Sandbox Code Playgroud)
就像在您的示例工作 OOTB 中一样。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |