有效数据级
validateit的Python项目详细描述
数据类验证程序
类型强制装饰器
数据类模块在运行时不控制类型。使用validateit可以强制用户使用propert type指定propert日期。 validateit为运行时类型检查提供类装饰器。您必须用typeforced修饰数据类。
>>>@typeforced...@dataclass...classItem:...name:str...idx:int...owners:List[str]...>>>
让我们尝试创建有效项
>>>Item("Sword",1,["damla"])Item(name='Sword',idx=1,owners=['damla'])
有趣的是:)让我们把int值赋给name字段
>>>Item(1515,1,["damla"])TypeError:Unexpectedtypefor'name'(expected<class'str'> but found <class 'int'>)
正如您所看到的,typeguard引发了一个TypeError,因为它需要一个字符串,但是我们给它一个整数
再举一个例子。给一个set对象而不是list[str]。
>>>Item("Sword",1,{"damla"})TypeError:Unexpectedtypefor'owners'(expectedtyping.List[str]butfound<class'set'>)
类型验证程序
验证特定字段而不是所有字段的类型(如果要在运行时检查所有字段的类型,请使用typeforced)。
让我们养宠物吧我们必须强制用户以字符串的形式给出名称,但我们不关心idx的类型。
>>>@dataclass...classPet:...idx:int...name:str=field(default=TypeValidator())...>>>Pet(15,"Minnos")Pet(idx=15,name='Minnos')>>>Pet(15,1313)TypeError:Unexpectedtypefor'name'(expected<class'str'> but found <class 'int'>)>>>Pet("fifteen","Minnos")# No error cuz it is not runtime typevalidated.Pet(idx='fifteen',name='Minnos')
积分
一些特定于整数的验证。可以采用max,min,max撸位数,min撸位数
>>>@dataclass...classInteger:...number:int=field(default=IntegerValidator(min=15,max=150))...point:int=field(default=IntegerValidator(min_digits=1,max_digits=10))...def__str__(self):...returnf"{self.number}.{self.point}"...>>>str(Integer(20,3333))'20.3333'>>>Integer(14,3333)ValueError:Integerisnotbiggerthan15(minimumlimit)>>>Integer(160,3333)ValueError:Integerisbiggerthan150(maximumlimit)>>>Integer(20,339933993399339)ValueError:Integerdoesn't capable of having maximum 10 digits.
字符串验证程序
一些特定于字符串的验证可以使用max_chars,max_chars,startswith,endswith
>>>@dataclass...classPerson:...name:str=field(default=StringValidator(min_chars=5,max_chars=10))...surname:str=field(default=StringValidator(startswith='a',endswith='n'))...>>>Person("damla","altun")Person(name='damla',surname='altun')>>>Person("daml","altun")ValueError:Stringdoesn't capable of having minimum 5 chars.>>>Person("damlaaaaaaaaa","altun")ValueError:Stringdoesn't capable of having maximum 10 chars.>>>Person("damla","xaltun")ValueError:Stringisn't starts with a>>>Person("damla","altunx")ValueError:Stringisn't ends with n