请参阅此代码:
from __future__ import print_function
from enum import Enum
class AType(Enum):
A = 1
B = 2
def as_key(self):
if self.name == AType.A:
return 'key for As'
else:
return 'some other key'
print(AType.A.as_key())
print(AType.B.as_key())
来自java世界;我原以为它打印
key for As
some other key
但我明白了:
some other key
some other key
可能超级简单,但是编写这样一个成员函数的正确方法是什么,它根据"枚举常量"给出一个结果。我在?
上调用方法答案 0 :(得分:3)
首先,为了解决这个问题:self.name
已经是关键,所以
def as_key(self):
return self.name
但是我认为这不是你想要的 - 这个函数可能只是一个基本的例子,你想编写更复杂的函数,根据枚举做不同的事情。
Enum
值是单一的 - AType.A
将始终返回完全相同的对象(而不是字符串"A"
,每次都可以创建一个新对象 - 尽管作为优化如果它仍在内存中,则literal将始终返回相同的对象。
此外,在方法中,self
是实际的枚举对象 - AType.A
或AType.B
。
所以 - 只需将self
与枚举值进行比较:
def as_key(self):
if self is AType.A:
return 'A'
elif self is AType.B:
return 'B'
else:
assert False, 'Unknown AType %s' % (self,)
BTW:Python中的is
运算符相当于Java中的==
- 它检查确切的对象标识(它是内存中相同位置的相同对象)。 Python的==
运算符等同于Java的equals()
方法 - 可以自定义它以比较对象的值。