
Hy Pythonista!我很高兴从我的话语中向您展示pyoload :
运行时期间,用于函数参数和类属性的扩展和递归类型检查和铸造的Python模块
在这里,我们使用Python提供的一些美丽而干净的功能,包括装饰人员和描述符,以帮助您在运行时输入检查
这是一些简单的用法示例,可以填写此PYPI页面。
该装饰函数使用inspect.signature的力量。签名来检查函数传递给该函数的参数,并支持默认值,通用的aliarse和注释,从而添加了更多注释类型,以便于方便,降低了一些代码。
from pyoload import *
@ annotate
def foo (
a : str , # this has an annotation
b = 3 , # this uses a default value
c : int = 0 # here both
) -> tuple [ str , int ]: # The return type
... from pyoload import *
@ annotate
def foo (
b = dict [ str | int , float ], # here a GenericAlias
c : Cast ( list [ int ]) = '12345' # here a recursive cast
): # No return type
...这使用与注释相同的原理,但允许多次调度功能(又称运行时过载?)。
from pyoload import *
@ multimethod
def foo ( a , b ):
print ( "two arguments" )
@ multimethod
def foo ( a : Values (( 1 , 2 , 3 ))):
print ( 'either 1, 2 or 3' )
@ foo . overload
def _ ( a : Any ):
raise ValueError ()这些是Pyoload添加的标准注释:
笔记
添加的注释仍然与标准类型不可合并。
pyoload.Values一个简单的tuple组子类,将其用作注释,它将仅验证随附的值。
@ annotate
def foo ( bar : Values ( range ( 5 ))):
...pyoload.Cast这将经过的参数对指定类型进行了递归铸造,它支持dict通用别名,如dict[str, int | str]当类型是联合时, dict[str, int | str]并尝试按指定顺序进行铸造。
@ annotate
def foo ( bar : Cast ( tuple [ int | str ])):
print ( bar )
foo (( 3 , "3" )) # (3, 3)
foo (( 3j , " " )) # ('3j', ' ')pyoload.Checks允许您使用自定义检查器方法,例如
from pyoload import *
test = lambda val : True # put your check here
def foo ( a : Checks ( func = test ):
...如果检查名称用_备份,则将被否定,如果失败,则会提高例外。您可以使用Check.register自己注册自己的支票
@ Check . register ( 'mycheck' )
def _ ( param , value ):
print ( param , value )
Checks ( mycheck = 'param' )( 'val' ) # Will raise error on check failure
@ annotate
def foo ( a : Checks ( mycheck = 'param' )):
...检查可以用作注释;使用pyoload.Checks称为Checks(foo=bar)(val) ;或使用pyoload.Checks直接调用: Check.check(name, param, arg)
接收作为参数的整数值指定了应找到长度的预期长度或切片
比较刨丝器,比从参数到值少,少于和水。
使用函数进行验证,该函数可以返回布尔值或引起错误。它可以直接作为位置参数传递给Pyoload.Checks as: Checks(func1, func2, foo=bar, foo2=bar2)
CheckedAttr和CastedAttr是简单的描述符,将执行铸造或检查分配。
from pyoload import *
class address :
number = CastedAttr ( tuple [ int ])
在分配中检查或施放值
笔记
如果尚未初始化,该属性将None返回