小编unl*_*fox的帖子

棉花糖模式和类继承

我是第一次使用 Marshmallow,不幸的是在互联网上找不到答案。

有两个类,一个类继承另一个类。两者都应该是可序列化和可反序列化的。反序列化后,它们应该可以再次作为 Python 对象使用。因此我使用post_load装饰器。但这似乎会引起问题。在下面的最小工作示例中,我得到以下异常:type object argument after ** must be a mapping, not Bicycle

现在可以查找该属性amount_of_tires,并在必要时传递数据。但这感觉不是正确的解决方案。

有解决这个问题的最佳实践吗?

from marshmallow import Schema, fields
from marshmallow.decorators import post_load


class Vehicle:
    def __init__(self, weight):
        self.weight = weight


class VehicleSchema(Schema):
    weight = fields.Float()

    @post_load
    def make_vehicle(self, data, **kwargs) -> Vehicle:
        return Vehicle(**data)


class Bicycle(Vehicle):
    def __init__(self, weight, amount_of_tires):
        Vehicle.__init__(self, weight=weight)
        self.amount_of_tires = amount_of_tires


class BicycleSchema(VehicleSchema):
    amount_of_tires = fields.Integer()

    @post_load
    def make_bicycle(self, data, **kwargs) -> Bicycle:
        return Bicycle(**data)


my_bicycle …
Run Code Online (Sandbox Code Playgroud)

python marshmallow

8
推荐指数
1
解决办法
5008
查看次数

如何用字符串表示反序列化枚举?

我想创建一个类,它有一个枚举作为属性。此枚举应具有字符串表示形式,在将使用枚举属性的类实例转储为 JSON 字符串时,该表示形式显示为人类可读的值。在下面的最小工作示例中,我以三种不同的方式创建了三个枚举。

反序列化后,每个属性都向我们表明它来自枚举,但带有字符串表示形式的枚举除外。它只是一个字符串。

如果不可能实现这样的结构,我想知道为什么。

要求

如果你想测试它,你必须安装jsonsattrs使用

pip install attrs jsons
Run Code Online (Sandbox Code Playgroud)

最小工作示例

在这里您可以看到一个最小的工作示例。

import jsons
import attr

from enum import Enum

# ----------------------------------------------------
# create enumeration with the help of a dictionary

fruits = {
    "PINEAPPLE": "PINEAPPLE",
    "APPLE": "APPLE",
    "ORANGE": "ORANGE",
    "BANANA": "BANANA",
}

Fruit = Enum("FRUITS", fruits)

# ----------------------------------------------------
# create a classical enumeration


class Nut(Enum):

    PEANUT = 1
    HAZELNUT = 2
    CASHEW = 3
    WALNUT = 4


# ----------------------------------------------------
# create enumeration with a …
Run Code Online (Sandbox Code Playgroud)

python enums serialization json-deserialization python-attrs

7
推荐指数
1
解决办法
4571
查看次数