これはない標準的な使用例ですが、IntEnum
Python の派生クラスに要素を動的に追加する必要があります。関数 API を使用して Enum を動的に作成するだけでは不十分であることに注意してください。既存の enum に要素を追加する必要があります。どうすればよいでしょうか?
背景: なぜ誰かがこれをやりたいのか疑問に思っている人のために。私はライブラリをラップしており、列挙型の値はライブラリ内で定義されています。ライブラリ API を使用して名前と値を照会できます。ただし、初期化時にこれを行うことはできません。これは、ユーザーの要求に応じてライブラリによって動的にロードされるコンポーネントに依存しているためです。起動時にすべてのコンポーネントをロードし、機能 API を使用してインポート時に列挙型を作成することもできますが、時間がかかり、副作用があります。
ベストアンサー1
extend_enum
これは、関数からの仕事ですaenum ライブラリ1 .
いくつかのサンプルEnum
:
from aenum import Enum
class Color(Enum):
black = 0
class ColorHelp(Enum):
_init_ = 'value __doc__'
black = 0, 'the absence of color'
extend_enum
実際のところ:
from aenum import extend_enum
extend_enum(Color, 'white', 1)
print Color, list(Color)
print repr(Color.black), Color.black, repr(Color.white), Color.white
print
extend_enum(ColorHelp, 'white', 1, 'the presence of every color')
print ColorHelp, list(ColorHelp)
print repr(ColorHelp.black), ColorHelp.black, ColorHelp.black.__doc__, repr(ColorHelp.white), ColorHelp.white, ColorHelp.white.__doc__
つまり、次のようになります。
<enum 'Color'> [<Color.black: 0>, <Color.white: 1>]
<Color.black: 0> Color.black <Color.white: 1> Color.white
<enum 'ColorHelp'> [<ColorHelp.black: 0>, <ColorHelp.white: 1>]
<ColorHelp.black: 0> ColorHelp.black the absence of color <ColorHelp.white: (1, 'the presence of every color')> ColorHelp.white None
1開示:私はPython 標準ライブラリEnum
、enum34
バックポート、 そしてその高度な列挙 ( aenum
)図書館。