自Python 3.4以來,存在Enum
類。如何比較Python中的枚舉?
我寫一個程序,其中一些常量有一個特定的順序,我不知道哪種方式是最Python的對它們進行比較:
class Information(Enum):
ValueOnly = 0
FirstDerivative = 1
SecondDerivative = 2
現在有一種方法,它需要比較給定information
的Information
與不同的枚舉:
information = Information.FirstDerivative
print(value)
if information >= Information.FirstDerivative:
print(jacobian)
if information >= Information.SecondDerivative:
print(hessian)
直接比較不枚舉工作,所以有三種方法,我不知道哪一個是首選:
方法1:使用值:
if information.value >= Information.FirstDerivative.value:
...
方法2:使用IntEnum:
class Information(IntEnum):
...
方法3:不使用枚舉所有:
class Information:
ValueOnly = 0
FirstDerivative = 1
SecondDerivative = 2
每種方法的工作原理,方法1稍微冗長一點,而方法2使用不推薦的IntEnum類,而方法3似乎是在添加Enum之前這樣做的方式。
我傾向於使用方法1,但我不確定。
感謝您的任何建議!
很好的描述,非常感謝。只有一個問題:你'返回NotImplemented'而不是'raise NotImplemented'。是否有一條通用規則,何時使用回報和何時加註? –
@SebastianWerk那麼,你不能'提高NotImplemented',因爲它不是一個例外。它是一個內置的單身人士。請參閱[docs](https://docs.python.org/3.5/library/constants.html#NotImplemented),它適用於富比較運算符的特殊情況。在'NotImplementedError',根據[文檔](https://docs.python.org/2/library/exceptions.html#exceptions.NotImplementedError),是有當「抽象方法應該提高該異常時,他們要求衍生類覆蓋該方法。「 」。 –
@SebastianWerk另外,看到這個問題:http://stackoverflow.com/questions/878943/why-return-notimplemented-instead-of-raising-notimplementederror –