有效数据级

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

积分

一些特定于整数的验证。可以采用maxminmax撸位数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_charsmax_charsstartswithendswith

>>>@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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异