使用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())


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM