zoukankan      html  css  js  c++  java
  • 使用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())
    
  • 相关阅读:
    组合数问题
    [Repost] 悬线法
    图论 List
    杂项 List
    动态规划 List
    Binary Search
    树状数组,Fenwick Tree
    HDU1086判断线段相交
    高效大数模板
    HDUOJ2298三分加二分
  • 原文地址:https://www.cnblogs.com/onsunsl/p/14299967.html
Copyright © 2011-2022 走看看