5th*_*5th 31 python oop pydantic
该类的最小示例:
from pydantic import BaseModel
class AdaptedModel(BaseModel):
def get_all_fields(self, alias=False):
return list(self.schema(by_alias=alias).get("properties").keys())
class TestClass(AdaptedModel):
test: str
Run Code Online (Sandbox Code Playgroud)
它的工作原理:
dm.TestClass.get_all_fields(dm.TestClass)
Run Code Online (Sandbox Code Playgroud)
有没有办法让它发挥作用而不需要再次上课?
获取所有字段名称所需的方式:
dm.TestClass.get_all_fields()
Run Code Online (Sandbox Code Playgroud)
如果将字段名称分配给属性,它也会起作用。只要有办法让它更具可读性
mik*_*sus 51
只使用怎么样__fields__
:
from pydantic import BaseModel
class AdaptedModel(BaseModel):
parent_attr: str
class TestClass(AdaptedModel):
child_attr: str
TestClass.__fields__
Run Code Online (Sandbox Code Playgroud)
输出:
{'parent_attr': ModelField(name='parent_attr', type=str, required=True),
'child_attr': ModelField(name='child_attr', type=str, required=True)}
Run Code Online (Sandbox Code Playgroud)
这只是一个字典,您可以通过以下方式仅获取字段名称:TestClass.__fields__.keys()
查看模型属性:https://pydantic-docs.helpmanual.io/usage/models/#model-properties
5th*_*5th 12
2024 年 1 月更新:这个答案是我在 pydantic v1 之前获取字段的方法。在 v1 中__fields__
添加了。然后随着model_fields
v2 的引入,这一点被弃用了。
好吧,解决方案是使用类方法而不是实例方法:
from pydantic import BaseModel, Field
class AdaptedModel(BaseModel):
@classmethod
def get_field_names(cls,alias=False):
return list(cls.schema(alias).get("properties").keys())
class TestClass(AdaptedModel):
test: str = Field(alias="TEST")
Run Code Online (Sandbox Code Playgroud)
我们正在使用Python 3.6.8,显然它已经被引入了。为了完整起见,有人可以发表评论吗@classmethod
?我假设从 3.6 开始。
归档时间: |
|
查看次数: |
39771 次 |
最近记录: |