使用pydantic 爲Python 代碼做類型標註和限制

from pydantic import BaseModel


class ModelTypeError(Exception):
    pass


class ModelAttrError(Exception):
    pass


class MyBaseModel(BaseModel):
    """
    帶類型和只讀屬性攔截
        a: int = Field(read_only=True)
    """

    def __setattr__(self, key, value):
        fields = self.__fields__
        field = fields.get(key) or dict()
        extra = field.field_info.extra

        if extra.get("read_only"):
            raise ModelTypeError("Read only field:{}".format(key))
        if field.type_ != type(value):
            raise ModelAttrError("Field type error:{}".format(key))
        super.__setattr__(self, key, value)

測試代碼

class A(MyBaseModel):
    a: int = Field(read_only=True)
    b: int = Field(read_only=False)



a = A(a=45, b=34)
a.a = 3
print(a.a)

a.b = "3"
print(a.b)

a.b = 88
print(a.b)

print(a.json())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章