首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >继承Pydantic的BaseModel后如何定义类属性?

继承Pydantic的BaseModel后如何定义类属性?
EN

Stack Overflow用户
提问于 2022-01-25 16:35:22
回答 2查看 2.6K关注 0票数 6

在普通python类中,我可以定义类属性,如

代码语言:javascript
运行
复制
class Example:
  x = 3
  def __init__(self):
    pass

如果我做了Example.x或者Example().x,我就得到了3

当我继承pydantic的BaseModel时,我不知道如何定义类属性,因为定义它们的通常方法是由BaseModel覆盖的。

例如:

代码语言:javascript
运行
复制
class Example(BaseModel):
  x = 3

print(Example.x)
--> type object 'Example' has no attribute 'x'

我希望能够定义类级别的属性。对此,正确的方法/语法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-29 14:52:40

好吧,我终于搞清楚了。答案在于数据类型如何处理类变量。(回想起来,这应该是显而易见的,但你活了下来,你学会了)

存在一个名为ClassVar的类型。当一个类的属性用ClassVar输入时,它就变成了一个类变量。

代码语言:javascript
运行
复制
class Example(BaseModel):
  x: ClassVar[int] = 3
  y: int


# Usage
print(Example().x)
>>> ValidationError

print(Example.x)
>>> 3
票数 7
EN

Stack Overflow用户

发布于 2022-03-26 23:03:18

您正确地定义了类级属性,但是读取错误。从该类读取变量时,应该通过定义该类的另一个变量访问该类。如下所示:

代码语言:javascript
运行
复制
from pydantic import BaseModel
class User(BaseModel):
  x = 3
user = User()
print(user.x)

出什么事:3

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70852331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档