目標は、動的に作成された属性を使用しての__str__(self)
メソッドをオーバーロードすることEnum
です。
動的列挙型は次のように作成できます
[1]:
from enum import Enum, auto
A = Enum('A',
dict(('a_'+some_input, auto())
for some_input in ['1','2','3']),
module=__name__)
メソッドのオーバーロードは、
[2]:
class A(Enum):
a_no_input = auto()
def __str__(self):
return str(self.name)
別々に、両方の例は必要に応じて機能します。両方を組み合わせるために私は試しました:
[1]: ...
A.__class__.__str__ = lambda self: str(self.name)
ただし、これによっての出力は変わりませんprint(A.a_1)
。
そして
class A(Enum):
def __init__(self):
super('A',
dict(('a_' + some_input, auto())
for some_input in ['1', '2', '3']),
module=__name__)
def __str__(self):
return str(self.name)
ただし、これでは、を介してアクセスできる静的属性は作成されませんA.a_1
。
列挙型の静的属性を動的に作成し、スーパークラスのメソッドをオーバーロードするにはどうすればよいEnum
ですか?
3番目のコードスニペットは次のようになります。
A.__str__ = lambda self: str(self.name)
__class__
取り出したことに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加