继承Pydantic的BaseModel后如何定义Class属性?
How to Define Class Attributes after Inheriting Pydantic's BaseModel?
在正常情况下 python classes 我可以定义 class 属性,例如
class Example:
x = 3
def __init__(self):
pass
然后如果我执行 Example.x
或 Example().x
,我会得到 3
。
当我继承 pydantic 的 BaseModel
时,我不知道如何定义 class 属性,因为通常定义它们的方式被 BaseModel 覆盖了。
例如:
class Example(BaseModel):
x = 3
print(Example.x)
--> type object 'Example' has no attribute 'x'
我希望能够定义 class 级别属性。什么是正确的 method/syntax?
你正确定义了class关卡属性,但是你读错了。
从这个 class 中读取变量时,您应该访问 class 而不是另一个定义 class 的变量。像这样:
from pydantic import BaseModel
class User(BaseModel):
x = 3
user = User()
print(user.x)
给出什么:3
Okey-dokey,我终于一探究竟了。答案在于 dataclasses 如何处理 class 变量。 (回想起来应该是显而易见的,但你生活和学习)
存在一个名为 ClassVar
的类型。当 class 的属性用 ClassVar
键入时,它就变成了 class 变量。
class Example(BaseModel):
x: ClassVar[int] = 3
y: int
# Usage
print(Example().x)
>>> ValidationError
print(Example.x)
>>> 3
在正常情况下 python classes 我可以定义 class 属性,例如
class Example:
x = 3
def __init__(self):
pass
然后如果我执行 Example.x
或 Example().x
,我会得到 3
。
当我继承 pydantic 的 BaseModel
时,我不知道如何定义 class 属性,因为通常定义它们的方式被 BaseModel 覆盖了。
例如:
class Example(BaseModel):
x = 3
print(Example.x)
--> type object 'Example' has no attribute 'x'
我希望能够定义 class 级别属性。什么是正确的 method/syntax?
你正确定义了class关卡属性,但是你读错了。 从这个 class 中读取变量时,您应该访问 class 而不是另一个定义 class 的变量。像这样:
from pydantic import BaseModel
class User(BaseModel):
x = 3
user = User()
print(user.x)
给出什么:3
Okey-dokey,我终于一探究竟了。答案在于 dataclasses 如何处理 class 变量。 (回想起来应该是显而易见的,但你生活和学习)
存在一个名为 ClassVar
的类型。当 class 的属性用 ClassVar
键入时,它就变成了 class 变量。
class Example(BaseModel):
x: ClassVar[int] = 3
y: int
# Usage
print(Example().x)
>>> ValidationError
print(Example.x)
>>> 3