1

以下のようにpythonicのような方法で印刷するにはどうすればよいですか(手動で作成できますが、より良いpythonicの方法があるように感じます)、もともとこれにdictを使用できると考えていましたが、pythonの知識が限られているため、私は'彼らの方が簡単な方法だと思います。私の最終目標は、json.dumps() を介して json オブジェクトを作成することです

望ましい結果:

{'cars': [{'make': 'VW', 'model': 'Jetta'},{'make': 'BMW', 'model': 'X5'}], 'name': 'John Smith'}

コード:

class Person(object):
    def __init__(self):
        self.name = None
        self.cars = []

class Car(object):
    def __init__(self, make, model):
        self.make = make
        self.model = model

>>> p = Person()
>>> p.name = 'John Smith'
>>> p.cars.append(Car('VW', 'Jetta'))
>>> p.cars.append(Car('BMW' ,'X5'))

>>> p.__dict__
{'cars': [<__main__.Car object at 0x7fe5566e9490>, <__main__.Car object at 0x7fe5566e94d0>], 'name': 'John Smith'}
4

2 に答える 2

3

json.dumps()メソッドには、未知のdefaultアイテムを JSON に変換するメソッドを指定できるキーワードがあります。それを利用します:

def default(obj):
    if isinstance(obj, (Car, Person)):  # so if this is one of *your* objects
        return obj.__dict__             # turn it into a python dict

    raise TypeError                     # Sorry, don't know how to handle this

それを使用して JSON を作成します。

json.dumps(p, default=default)

結果:

>>> json.dumps(p, default=default)
'{"cars": [{"make": "VW", "model": "Jetta"}, {"make": "BMW", "model": "X5"}], "name": "John Smith"}'
于 2013-04-12T15:07:46.200 に答える
-1

これを Car クラスに追加します。

def __repr__(self):
    return "{'make': %s, 'model': %s}" % (self.make, self.model)

編集:

次のこともできます。

def __repr__(self):
    return str(self.__dict__)

ただし、すべての属性が出力されます。

EDIT2:

あなたの目標が json.dumps() を使用して JSON ファイルを生成することだとは知りませんでした。その場合、Martijn Pieters のアプローチを使用する必要があります。

于 2013-04-12T15:05:30.490 に答える