需要一种方法来获得python对象从棉花糖加载函数,而不是字典,而不是使用后加载d

2024-05-18 15:47:45 发布

您现在位置:Python中文网/ 问答频道 /正文

class ProfileSchema(Schema):

    id = fields.Integer()
    first_name = fields.String(required=True)
    last_name = fields.String()
    phone = fields.Str()
    email = fields.Email()
    gender = fields.String()
    city = fields.Str()
    state = fields.Str()
    country = fields.Str()
    age = fields.Int()
    id_proof = fields.Str()
    id_number = fields.Str()
    id_kyc_url = fields.Str()
    image_url = fields.Str()
    profile_type = fields.Str()
    country_code = fields.String()

    @validates('gender')
    def validate_gender(self, value):
        """
        validates gender
        :param value:
        :return:
        """
        if value not in genders:
            raise ValidationError('Incorrect gender value it should be either Male or Female')

    @post_load
    def make_profile(self, data):
        """
        make profile obj
        :param data:
        :return:
        """
        return Profile(**data)

在上面的模式中,我使用post_load将dict转换为一个对象。有没有办法不使用后加载装饰器来获得这个?在


Tags: nameselfidurlfieldsdatastringreturn
1条回答
网友
1楼 · 发布于 2024-05-18 15:47:45

如果我没弄错的话,你遇到的问题不是后加载装饰器,而是维护两个对象定义的冗余。如果是这样,您可以使用namedtuple或{a2}来实现您想要的。您仍然可以在模式上定义post_load方法,但不再需要维护第二个类定义。在

命名双解

from collections import namedtuple

def make_object(class_name, members):
    obj = namedtuple(class_name, ' '.join(members.keys()))
    for k, v in members.items():
        setattr(obj, k, v)
    return obj

数据类解决方案

^{pr2}$
class ProfileSchema(Schema):

    id = fields.Integer()
    first_name = fields.String(required=True)
    last_name = fields.String()
    phone = fields.Str()
    email = fields.Email()
    gender = fields.String()
    city = fields.Str()
    state = fields.Str()
    country = fields.Str()
    age = fields.Int()
    id_proof = fields.Str()
    id_number = fields.Str()
    id_kyc_url = fields.Str()
    image_url = fields.Str()
    profile_type = fields.Str()
    country_code = fields.String()

    @validates('gender')
    def validate_gender(self, value):
        """
        validates gender
        :param value:
        :return:
        """
        if value not in genders:
            raise ValidationError('Incorrect gender value it should be either Male or Female')

    @post_load
    def make_profile(self, data):
        """
        make profile obj
        :param data:
        :return:
        """
        return make_object(data)

相关问题 更多 >

    热门问题