我有一个包含所有必要参数的类。但是,对于init函数,它要求关键字参数,并且不接受位置参数。所以,我的问题是:我可以在 pydantic.BaseModel 的配置中更改一些内容以允许位置参数吗?
这是我的班级的一个例子:
class Foo(BaseModel):
a: int
b: Optional[str]
c: Optional[float]
Run Code Online (Sandbox Code Playgroud)
所以,我无法像这样初始化该类:
Foo(1,2,2.5)
# instead, I should init it like this:
Foo(a=1,b=2,c=2.5)
Run Code Online (Sandbox Code Playgroud)
因此,我需要能够将位置关键字传递给类。是否可以?
__init__在 pycharm 中使用的带有类型提示的覆盖方法示例
class Foo(BaseModel):
a: int
b: Optional[str]
c: Optional[float]
def __init__(self, a: int,
b: Optional[str] = None,
c: Optional[float] = None,
**kwargs) -> None:
super(Foo, self).__init__(a=a, b=b, c=c, **kwargs)
Run Code Online (Sandbox Code Playgroud)
Pydantic 对象不支持位置参数,除非您按照 Arseniy Lebedev 建议的那样自己实现它。
这是为什么 ?以下是一些原因:
import json
from pydantic import BaseModel
from typing import Optional
class Foo(BaseModel):
a: int
b: Optional[str]
c: Optional[float]
Run Code Online (Sandbox Code Playgroud)
您可以为 Pydantic 提供您想要用来初始化模型的每个密钥(您所做的):
Foo(a=1,b="2",c=2.5)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用 json:
json_raw = '{"a": 1, "b": "2", "c": 3}'
some_dict = json.loads(json_raw)
my_foo = Foo(**some_dict)
Run Code Online (Sandbox Code Playgroud)
或两者的混合:
json_raw = '{"a": 1, "b": "2"}'
some_dict = json.loads(json_raw)
my_foo = Foo(**some_dict, c=3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5907 次 |
| 最近记录: |