Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 作为枚举成员的保留字_Python_Python 3.x_Enums_Reserved Words_Reserved - Fatal编程技术网

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

我想让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
来实现这一点呢

它存储在一个下划线变量中:

>>> 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'>]