Python 在棉花糖模式中将对象属性分组到新字典中

Python 在棉花糖模式中将对象属性分组到新字典中,python,marshmallow,Python,Marshmallow,我试图用棉花糖序列化一个对象,使相关属性组合到一个原始对象上不存在的字典中。我的代码: from marshmallow import Schema, fields, pprint import json class StatsSchema(Schema): population = fields.Int() rating = fields.Int() class AnimalSchema(Schema): name = fields.Str() featur

我试图用棉花糖序列化一个对象,使相关属性组合到一个原始对象上不存在的字典中。我的代码:

from marshmallow import Schema, fields, pprint
import json

class StatsSchema(Schema):
    population = fields.Int()
    rating = fields.Int()

class AnimalSchema(Schema):
    name = fields.Str()
    features = fields.List(fields.Str())
    stats = fields.Nested(StatsSchema)

dog = {
    'name':'dog',
    'features': ['tongue', 'wet nose'],
    'population': 200,
    'rating': 10
}

animal_schema = AnimalSchema()
data, errors = animal_schema.dump(dog)

print(json.dumps(data, indent=2))
实际结果:

{
  "features": [
    "tongue",
    "wet nose"
  ],
  "name": "dog"
}
预期结果:

{
  "features": [
    "tongue",
    "wet nose"
  ],
  "name": "dog",
  "stats": {"population": 500, "rating": 10}
}

我知道输出中缺少stats键,因为它不在原始对象上,但我不确定如何指定Marshmallow应使用该对象将新stats键创建为新字典。

我找到了一种创建内部字典的可能方法。不确定这是否是唯一/最好的方法:

class AnimalSchema(Schema):
    name = fields.Str()
    features = fields.List(fields.Str())
    stats = fields.Method('get_stats')

    def get_stats(self, post):
        data, err = StatsSchema().dump(post)
        return data
这将在中讨论

你可以这么做

class AnimalSchema(Schema):
    name = fields.Str()
    features = fields.List(fields.Str())
    stats = fields.Nested(StatsSchema, dump_only=True)

class Animal:
    [...]
    @property
    def stats(self):
        return {'population': self.population, 'rating': self.rating}