获取 pydantic class 的所有字段名称的简短方法

Short way to get all field names of a pydantic class

class 的最小示例:

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

工作方式:

dm.TestClass.get_all_fields(dm.TestClass)

有没有办法让它工作而无需再次输入 class?

获取所有字段名称的所需方式:

dm.TestClass.get_all_fields()

如果将字段名称分配给属性,它也可以工作。任何让它更具可读性的方法

好的解决方案是使用 class-method instead of an instance method:

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")

我们正在使用 Python 3.6.8,显然它已经被引入。为了完整起见,有人可以评论 @classmethod 何时存在吗?我假设从 3.6.

如果只使用 __fields__:

from pydantic import BaseModel

class AdaptedModel(BaseModel):
    parent_attr: str

class TestClass(AdaptedModel):
    child_attr: str
        
TestClass.__fields__

输出:

{'parent_attr': ModelField(name='parent_attr', type=str, required=True),
 'child_attr': ModelField(name='child_attr', type=str, required=True)}

这只是一个字典,您可以通过以下方式仅获取字段名称:TestClass.__fields__.keys()

查看模型属性:https://pydantic-docs.helpmanual.io/usage/models/#model-properties