Python con';t在pydantic init函数中定义变量
我想定义一个从pydantic BaseModel继承的基础模型,如bellowPython con';t在pydantic init函数中定义变量,python,python-3.x,model,pydantic,Python,Python 3.x,Model,Pydantic,我想定义一个从pydantic BaseModel继承的基础模型,如bellow 类BaseDomain(BaseModel): 定义初始(自我,**kwargs): self.\uuu异常=[] def add_错误(自身,异常:GeneralException): self.\u exceptions.append(异常) 但当我使用从BaseDomain继承的产品模型时,我会遇到这个错误 ValueError: "Product" object has no fiel
类BaseDomain(BaseModel):
定义初始(自我,**kwargs):
self.\uuu异常=[]
def add_错误(自身,异常:GeneralException):
self.\u exceptions.append(异常)
但当我使用从BaseDomain继承的产品模型时,我会遇到这个错误
ValueError: "Product" object has no field "_BaseDomain__exceptions"
因为您已经跳过了pydantic的init方法,该方法在创建从BaseModel继承的类时执行。你应该叫super() 编辑 pydantic抛出该错误似乎是因为它将异常验证为输入,并抛出一个错误,因为它没有在类注释中定义 试试这个:
from typing import List, Any
class BaseDomain(BaseModel):
__exceptions:List[Any] = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
请在init方法中介绍super
def\uuuuu init\uuuuuuu(self,**kwargs):
超级()。\uuu初始化
另一个带有“下划线属性为私有”选项的版本
同样的错误不断出现检查我刚才的编辑如果你解释为什么超级调用是必要的,这个答案可以改进。您可以使用“编辑”按钮为您的帖子提供其他信息。
from typing import List, Any
class BaseDomain(BaseModel):
__exceptions:List[Any] = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
from typing import List, Optional, Any
from pydantic import BaseModel
class BaseDomain(BaseModel):
__exceptions: Optional[List[Any]] = None
class Config:
underscore_attrs_are_private = True
def add_error(self, exception: Exception):
if self.__exceptions is None:
self.__exceptions = []
self.__exceptions.append(exception)
def get_exceptions(self):
return self.__exceptions
class Item(BaseDomain):
name: str
item = Item(name="test")
print(item.get_exceptions())
item.add_error(Exception("test"))
print(item.get_exceptions())