Python:装饰器之有参装饰器

Posted 白鹭洲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:装饰器之有参装饰器相关的知识,希望对你有一定的参考价值。

from inspect import signature

def f(a,b,c=1):pass
sig = signature(f)
sig.parameters
实现一个对被装饰的函数的参数类型检查的装饰器

 

from inspect import signature
def typeassert(*ty_args,**ty_kargs):
    def decorator(func):
        #func ->a,b
        #d = {‘a‘:int,‘b‘:str}
        sig = signature(func)
        btypes = sig.bind_partial(*ty_args,**ty_kargs).arguments
        def wrapper(*args,**kargs):
            #arg in d,instance(arg,d[arg])
            for name, obj in sig.bind(*ty_args,**ty_kargs).arguments:
                if name in btypes:
                    if not instance(obj,btyes[name]):
                        raise TypeError("%s" must be "%s" %(name,btyes[name]))

            return func(*args,**kargs)
        return wrapper
    return decorator

@typeassert(int,str,list)

 

以上是关于Python:装饰器之有参装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python之有参装饰器_02

Python中的装饰器之写一个装饰器

Python装饰器之 property()

Python装饰器之 property()

python装饰器之property

python进阶之装饰器之2.定义一个可接受参数的装饰器如何定义一个属性可由用户修改的装饰器定义一个能接受可选参数的装饰器