私が行ったPythonスクリプトのオブジェクトからフィールドにアクセスする際に問題があります。基本的には、コードのこの小さな作品に沸く:フィールドのデフォルト値
from enum import Enum
class AbstractFoo:
def __init__(self, foo='works', bar='nope'):
self.foo = foo
self.bar = bar
class Foo(Enum):
test = AbstractFoo('bla', 'tada')
だから、Pythonのコンソールに私が私の列挙型の要素にアクセスしようとすると:
Foo.test.foo
私はそれが私を印刷することを期待します " bla 'はコンストラクタに渡す値です(少なくとも、私が割り当てたデフォルト値である' works 'を出力する必要があります)。
私は何を実際に取得すると、あなたはおそらく今私はPythonとPythonで特に概念オブジェクトにかなり新たなんだということで伝えることができ
AttributeError: 'Foo' object has no attribute 'foo'
です(私は主に、いくつかのmissconceptionsにつながる可能性があるJavaでコードを書きますPythonでオブジェクトの動作についての私の部分から)。私も考え出し何
は私が行うことができるということです。
Foo.test.foo = 'whatever'
と、このようにfooに値を割り当てます。
Foo.test.noField = 'shouldn't even exist'
、それは私は全く理解していないこれだけのように正常に動作します。しかし、これをやると、私も、私もようなコンストラクタで指定されていないフィールドに値を割り当てることができます。
私は、オブジェクトがどのようにしてPythonで動作するか、および/またはPythonでクラスの列挙型を実現する方法について、本当に嬉しく思っています。
編集:明らかに、コードはEnumから継承を削除した場合、私が望むように動作します。
enumが必要ですか?コードは 'Enum'から' Foo'を継承しないと期待通りに動作します – sommerjj
それはありますか?大いに感謝する!しかし、enumの問題は何ですか? – Desperate
私がenumを使用しないときは、これはFooクラスに属する静的フィールド(Javaの用語集を使用しています)のようになりました。私がしようとしていることは重要ではありませんが、なぜ私のコードが動作するのかを理解することを好む(: – Desperate