我试图在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)