オブジェクトのフィールドからのPython辞書 質問する

オブジェクトのフィールドからのPython辞書 質問する

任意のオブジェクトから辞書を作成する組み込み関数があるかどうかご存知ですか? 次のようなことを実行したいと思います。

>>> class Foo:
...     bar = 'hello'
...     baz = 'world'
...
>>> f = Foo()
>>> props(f)
{ 'bar' : 'hello', 'baz' : 'world' }

注意:メソッドは含めないでください。フィールドのみ含めてください。

ベストアンサー1

Python 2.7でのベストプラクティスは、新しいスタイルクラス(Python 3では必要ありません)、つまり

class Foo(object):
   ...

また、「オブジェクト」と「クラス」には違いがあります。任意のオブジェクトから辞書を構築するには、 を使用すれば十分です__dict__。通常、メソッドはクラス レベルで宣言し、属性はインスタンス レベルで宣言するので、__dict__問題ありません。例:

>>> class A(object):
...   def __init__(self):
...     self.b = 1
...     self.c = 2
...   def do_nothing(self):
...     pass
...
>>> a = A()
>>> a.__dict__
{'c': 2, 'b': 1}

より良いアプローチ(提案者ロバートコメント欄にある)は組み込みのvars関数:

>>> vars(a)
{'c': 2, 'b': 1}

あるいは、何をしたいかに応じて、 を継承するとよいかもしれませんdict。その場合、クラスはすでに辞書になっており、必要に応じてgetattrおよび/またはをオーバーライドしsetattrて を呼び出して辞書を設定できます。例:

class Foo(dict):
    def __init__(self):
        pass
    def __getattr__(self, attr):
        return self[attr]

    # etc...

おすすめ記事