作为枚举成员的保留字
Reserved word as member of enum
我想制作一个 python 枚举作品,其中包含一个保留字作为成员。
class Test(Enum):
one = "one"
is_ = "is"
我想自定义 __name__
以使用通常的语法 return
>>> print(Test.is_.name)
is
那么我该如何自定义 __name__
、__getattribute__
或 __getattr__
来完成此操作?
它存储在一个单下划线变量中:
>>> Test.is_._name_ = 'is'
>>> Test.is_.name
'is'
这也将修复 repr,并且成员值调用仍然有效:
>>> list(Test)
[<Test.one: 'one'>, <Test.is: 'is'>]
>>> Test('is')
<Test.is: 'is'>
当然,属性访问仍然必须使用声明的名称,否则会出现语法错误。
要启用按成员名称调用,请将其修补到映射中:
>>> Test.is_._name_ = 'is'
>>> Test._member_map_['is'] = Test.is_
>>> Test['is']
<Test.is: 'is'>
如果您在这里需要的不仅仅是一个简单的别名,那么您可能想要删除原始名称and/or注意保留成员映射中的顺序。
您可以使用 Functional API
代替内部结构:
Test = Enum('Test', [('one', 'one'), ('is', 'is'), ('is_', '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'>]
我想制作一个 python 枚举作品,其中包含一个保留字作为成员。
class Test(Enum):
one = "one"
is_ = "is"
我想自定义 __name__
以使用通常的语法 return
>>> print(Test.is_.name)
is
那么我该如何自定义 __name__
、__getattribute__
或 __getattr__
来完成此操作?
它存储在一个单下划线变量中:
>>> Test.is_._name_ = 'is'
>>> Test.is_.name
'is'
这也将修复 repr,并且成员值调用仍然有效:
>>> list(Test)
[<Test.one: 'one'>, <Test.is: 'is'>]
>>> Test('is')
<Test.is: 'is'>
当然,属性访问仍然必须使用声明的名称,否则会出现语法错误。
要启用按成员名称调用,请将其修补到映射中:
>>> Test.is_._name_ = 'is'
>>> Test._member_map_['is'] = Test.is_
>>> Test['is']
<Test.is: 'is'>
如果您在这里需要的不仅仅是一个简单的别名,那么您可能想要删除原始名称and/or注意保留成员映射中的顺序。
您可以使用 Functional API
代替内部结构:
Test = Enum('Test', [('one', 'one'), ('is', 'is'), ('is_', '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'>]