我有一个 Python 类,其中包含许多带签名的方法:
def select_xxx(self, arg1 , arg2 , .. argn, intersect = False)
即这些方法具有不同数量 (1-3) 的位置参数,并且可选参数与默认值 False 相交。我想用一个装饰器来装饰所有这些方法,它将检查 intersect 参数的值并相应地采取不同的操作。我目前的方法是这样的:
def select_decorator(select_method):
def select_wrapper( self , *args, intersect = False , **kwargs)
if intersect:
# Special init code for intersect == True
select_method( self , *args , **kwargs)
else:
# Normal call path for intersect == False
select_method( self , *args , **kwargs)
return select_wrapper
@select_decorator
select_xxx( self , arg1 , arg2 , intersect = False)
但是让可选参数与装饰器内的 *args 和 **kwargs 混合相交目前并不令人高兴。如果这能让问题更容易解决,我可以牺牲 **kwargs 功能。有什么建议吗?
乔金姆
最佳答案
我假设 intersect 将始终作为关键字参数传递。在这种情况下,您可以简单地在装饰器内执行此操作
def select_decorator(select_method):
def select_wrapper( self , *args, **kwargs):
intersect = kwargs.has_key('intersect') and kwargs['intersect']
if intersect:
# Special init code for intersect == True
select_method( self , *args , **kwargs)
else:
# Normal call path for intersect == False
select_method( self , *args , **kwargs)
return select_wrapper
关于python - 用可选参数装饰 python 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565853/