【问题标题】:Python Generic optional paramPython 通用可选参数
【发布时间】:2021-12-03 10:25:33
【问题描述】:

我有class CRUDBase(和tiangolo example完全一样)和很多继承了这个基类的类。

我想为这个类添加可选模式:(这个选项不起作用)

class CRUDBase(Generic[ModelType, CreateSchemaType, UpdateSchemaType, Optional[ValidateSchemaType]=None]):

做这样的功能:

def validate(self, db_obj):
    if ValidateSchemaType is None:
        raise NotImplementedError
    try:
        ValidateSchemaType.from_orm(db_obj)
    except ValidationError as e:
        return translate_error(e)
    return {}

你有什么想法吗?

【问题讨论】:

标签: python oop generics fastapi pydantic


【解决方案1】:

您正在尝试将工作与模型和验证相结合。我认为这不是一个好主意。你应该像这样向你的 Pydantic 模式添加验证

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel


class BaseValidator(BaseModel):
    def validate_db_object(self, db_obj):
        return self.validate(db_obj)


class User(BaseValidator):
    id: int
    name = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: List[int] = []


if __name__ == '__main__':
    a = User(id=1, name='Egor')
    a.validate_db_object(db_obj={'id': 5})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2012-05-02
    • 1970-01-01
    • 2018-11-16
    • 2012-04-11
    • 2019-07-12
    • 2017-09-02
    • 2017-11-28
    相关资源
    最近更新 更多