pydantic基模型破坏了类方法对属性的访问



我试图在python中导出类的一些属性。pydantic的引入破坏了对类方法中属性的访问。

看下面的例子:

class Person:
age: int = 25

@classmethod
def printAge(cls):
print('The age is:', cls.age)

如果我把它延伸到pydantic,它会打破

class Person(BaseModel):
age: int = 25

@classmethod
def printAge(cls):
print('The age is:', cls.age)

引发以下错误:

type object 'Person' has no attribute 'age'

有人知道这是怎么回事吗?更重要的是,如何克服这个问题?

BaseModel类使用ModelMetaclass元类构造新的模型类型。其中一部分是将类字段转换为ModelField实例。如果您确实需要内省这些数据,您可以在类上使用__fields__属性来访问其配置。在这种情况下,你可以这样做:

class Person(BaseModel):
age: int = 25
@classmethod
def printAge(cls):
print('The age is:', cls.__fields__["age"].default)