gpt4 book ai didi

python - 在 Marshmallow Schema 中以编程方式定义字段

转载 作者:太空狗 更新时间:2023-10-30 00:27:29 25 4
gpt4 key购买 nike

假设我有一个这样的架构:

class MySchema(Schema):

field_1 = Float()
field_2 = Float()
...
field_42 = Float()

有没有办法以编程方式将这些字段添加到类中?

像这样:

class MyClass(BaseClass):

FIELDS = ('field_1', 'field_2',..., 'field_42')

for field in FIELDS:
setattr(?, field, Float()) # What do I replace this "?" with?

我看过关于动态添加属性到类实例的帖子,但这是不同的,因为

  • 我不想修补一个实例,而是一个类
  • Marshmallow Schema 使用自定义元类

同样的问题可能适用于其他模型定义库,例如 ODM/ORM(uMongo/MongoEngine、SQL Alchemy 等)

最佳答案

您需要做的就是使用type() 函数来构建具有您想要的任何属性的类:

MySchema = type('MySchema', (marshmallow.Schema,), {
attr: marshmallow.fields.Float()
for attr in FIELDS
})

您甚至可以在那里设置不同类型的字段:

fields = {}
fields['foo'] = marshmallow.fields.Float()
fields['bar'] = marshmallow.fields.String()
MySchema = type('MySchema', (marshmallow.Schema,), fields)

或作为您自定义的基础:

class MySchema(type('_MySchema', (marshmallow.Schema,), fields)):
@marshmallow.post_dump
def update_something(self, data):
pass

关于python - 在 Marshmallow Schema 中以编程方式定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42231334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com