Python 作为枚举成员的保留字
我想让python枚举使用保留字作为成员Python 作为枚举成员的保留字,python,python-3.x,enums,reserved-words,reserved,Python,Python 3.x,Enums,Reserved Words,Reserved,我想让python枚举使用保留字作为成员 class Test(Enum): one = "one" is_ = "is" 我想定制\uuuuu name\uuuuuu以获得通常的语法返回 >>> print(Test.is_.name) is 那么,我如何定制\uuuuu name\uuuuuu、\uuuuu getattribute\uuuuuu或\uuuuu getattr\uuuuuu来实现这一点呢 它存储在一个下划线变量中: >>&g
class Test(Enum):
one = "one"
is_ = "is"
我想定制\uuuuu name\uuuuuu
以获得通常的语法返回
>>> print(Test.is_.name)
is
那么,我如何定制\uuuuu name\uuuuuu
、\uuuuu getattribute\uuuuuu
或\uuuuu getattr\uuuuuu
来实现这一点呢 它存储在一个下划线变量中:
>>> Test.is_._name_ = 'is'
>>> Test.is_.name
'is'
这也将修复repr,并且“按成员调用”值仍然有效:
>>> list(Test)
[<Test.one: 'one'>, <Test.is: 'is'>]
>>> Test('is')
<Test.is: 'is'>
>列表(测试)
[, ]
>>>测试('is')
当然,属性访问仍然必须使用声明的名称,否则将是一个语法错误
要启用按成员名称调用,请将其修补到映射中:
>>> Test.is_._name_ = 'is'
>>> Test._member_map_['is'] = Test.is_
>>> Test['is']
<Test.is: 'is'>
>>Test.is.\u name.='is'
>>>Test.\u成员\u映射\u['is']=Test.is\u
>>>测试['is']
如果您在这里需要的不仅仅是一个简单的别名,那么您可能需要删除原始名称和/或注意保留成员映射中的顺序。您可以使用: 在使用中:
>>> Test.one
<Test.one: 'one'>
>>> Test.is
File "<stdin>", line 1
test.is
^
SyntaxError: invalid syntax
>>> Test.is_
<Test.is: 'is'>
>>> Test['is']
<Test.is: 'is'>
>>> Test['is_']
<Test.is: 'is'>
>>> Test('is')
<Test.is: 'is'>
>>> list(Test)
[<Test.one: 'one'>, <Test.is: 'is'>]
>Test.one
>>>Test.is
文件“”,第1行
test.is
^
SyntaxError:无效语法
>>>Test.is_
>>>测试['is']
>>>测试
>>>测试('is')
>>>列表(测试)
[, ]
请注意,这也会中断按名称访问成员;请尝试Test[Test.is_uu.name]
您完全正确@Ethan Furman我是在问了这个问题之后才想起函数API的,因为在创建枚举时我总是喜欢使用类语法(如果可能的话)。
>>> Test.one
<Test.one: 'one'>
>>> Test.is
File "<stdin>", line 1
test.is
^
SyntaxError: invalid syntax
>>> Test.is_
<Test.is: 'is'>
>>> Test['is']
<Test.is: 'is'>
>>> Test['is_']
<Test.is: 'is'>
>>> Test('is')
<Test.is: 'is'>
>>> list(Test)
[<Test.one: 'one'>, <Test.is: 'is'>]