我怎样才能以类似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'}
答案 0 :(得分: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"}'
答案 1 :(得分:-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的方法。