1. ホーム
  2. python

[解決済み] オブジェクトのフィールドからPython辞書を生成する

2022-03-24 23:54:03

質問

任意のオブジェクトから辞書を構築するビルトイン関数をご存知でしょうか?こんなことをやってみたいのですが。

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

NOTE メソッドを含んではいけません。フィールドのみです。

解決方法は?

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 を呼び出して、dictを設定します。例えば

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

    # etc...