
Hy Pythonista!私の言葉から、私はあなたにpyoload提示してうれしいです:
ランタイム中に関数引数とクラス属性の拡張および再帰タイプのチェックとキャストのためのPythonモジュール
ここでは、Pythonが提供する美しくきれいな機能のいくつかを使用して、デコレータや記述子を含むものを使用して、ランタイム中にチェックを入力するのに役立ちます
このPypiページを入力するための簡単な使用例を以下に示します。
このデコレーター関数は、 inspect.signatureの容易さを使用して、デフォルト値、一般的なアリース、および注釈をサポートして注釈を使用して関数に渡された引数を確認し、便利なためにさらに注釈タイプを追加し、コードを下げます。
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]およびタイプが組合である場合、指定された順序でキャストします。
@ 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 as: Check.check(name, param, arg)を使用して直接呼び出されました
引数として受信される整数値は、予想される長さまたは長さを見つけるべきスライスを指定しました
パラメーターから値まで、より少ない、およびAqualよりもgraterを比較します。
検証に関数を使用すると、関数はブール値を返したり、エラーを上げたりすることがあります。 pyoload.checks as: Checks(func1, func2, foo=bar, foo2=bar2)の位置引数として直接渡すことができます。
CheckedAttrとCastedAttr 、割り当てのキャスティングまたはチェックを実行する簡単な記述子です。
from pyoload import *
class address :
number = CastedAttr ( tuple [ int ])
値は、割り当てでチェックまたはキャストされます
注記
属性は、まだ初期化されていない場合はNone返されません