私はPythonでEnumの基底クラスが存在することを発見しました。私はそれがどのように役立つのか想像しています。文字列をpython enumと比較するには?
のは、私は交通信号の状態を定義しましょう:
from enum import Enum, auto
class Signal(Enum):
red = auto()
green = auto()
orange = auto()
はのは、私はインスタンスbrain_detected_colour = "red"
のために、色の名前を表す文字列の形で、私のプログラムでは、いくつかのサブシステムからの情報を受信しましょう。
この文字列を信号光信号とどのように比較できますか? Signal.red
が文字列ではないので
もちろん、brain_detected_colour is Signal.red
は、False
です。
Signal(brain_detected_colour) is Signal.red
は、ValueError: 'red' is not a valid Signal
で失敗します。
brain_detected_colourで 'is'を使用すると、Signal.red.name'は危険です。 '=='を使うほうが良いでしょう。 – mwchase
@mwchase答えを編集して説明を追加できるように、理由を説明できますか? – bli
あなたは実際にオブジェクトのアイデンティティを比較する必要がない限り、文字列のインターンリング、暗い実装の詳細http://guilload.com/python-string-interning/に決して 'is'を使用しないでください。 –