Python Enumsにメンバーを追加する 質問する

Python Enumsにメンバーを追加する 質問する

これはない標準的な使用例ですが、IntEnumPython の派生クラスに要素を動的に追加する必要があります。関数 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 標準ライブラリEnumenum34バックポート、 そしてその高度な列挙 ( aenum)図書館。

おすすめ記事