在普通python类中,我可以定义类属性,如
class Example:
x = 3
def __init__(self):
pass
如果我做了Example.x
或者Example().x
,我就得到了3
。
当我继承pydantic的BaseModel
时,我不知道如何定义类属性,因为定义它们的通常方法是由BaseModel覆盖的。
例如:
class Example(BaseModel):
x = 3
print(Example.x)
--> type object 'Example' has no attribute 'x'
我希望能够定义类级别的属性。对此,正确的方法/语法是什么?
发布于 2022-03-29 14:52:40
好吧,我终于搞清楚了。答案在于数据类型如何处理类变量。(回想起来,这应该是显而易见的,但你活了下来,你学会了)
存在一个名为ClassVar
的类型。当一个类的属性用ClassVar
输入时,它就变成了一个类变量。
class Example(BaseModel):
x: ClassVar[int] = 3
y: int
# Usage
print(Example().x)
>>> ValidationError
print(Example.x)
>>> 3
发布于 2022-03-26 23:03:18
您正确地定义了类级属性,但是读取错误。从该类读取变量时,应该通过定义该类的另一个变量访问该类。如下所示:
from pydantic import BaseModel
class User(BaseModel):
x = 3
user = User()
print(user.x)
出什么事:3
https://stackoverflow.com/questions/70852331
复制相似问题