有效数据级

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 Selenium Web驱动程序。负载策略不稳定   JAVAsql。SQLException:没有合适的驱动程序无法创建“oracle”类的JDBC驱动程序。jdbc。驾驶员用于连接URL的OracleDriver   java谷歌地图“优化路径点”如何解决旅行推销员的问题?   java这段代码可能会造成潜在的内存泄漏吗?   java更改JCombobox的高度   java如何清除jtable中的数据   JavaHadoop:错误安全性。UserGroupInformation:MapReduce程序中的PriviledgedActionException   java如何将sonarlint添加到gradle任务中?   性能为什么Java排序优于原语计数排序   java Spring属性PlaceHolderConfigure从数据库加载   java从泛型获取类不起作用   java Spring@Transactional传播属性   java试图拥有主菜单和子菜单类   XSL的java后处理步骤   java第一个字母和最后一个字母、第二个字母和倒数第二个字母之间的差值之和,依此类推,直到单词的中心   switch语句在Java中的下一个出发点   java 安卓如何在OnBackpress()时设置viewpager的特定项目位置?