Python 通用可选参数

Posted

技术标签:

【中文标题】Python 通用可选参数【英文标题】:Python Generic optional param 【发布时间】: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 

你有什么想法吗?

【问题讨论】:

我认为你应该使用type variables 和Generic。我不清楚你想做什么。 【参考方案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)

【讨论】:

以上是关于Python 通用可选参数的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin - 检查通用参数是否可选?

Python - 必需参数之前的可选参数

Python函数:函数的定义语法调用参数类型(必选参数缺省参数可选参数关键字可选参数)return返回值函数嵌套

Python 可选参数

Python 用可变数量的位置参数和可选参数装饰方法

多个可选参数python