在 Python 3.x 中,我想为特定的已知函数proxiedFunc创建一个代理函数_proxy并保证传递的所有参数都完全“转发”,就像它们直接传递给proxiedFunc 一样。
# Pseudo-Python code
def _proxy(???generic_parameters???):
return proxiedFunc(???arguments???)
Run Code Online (Sandbox Code Playgroud)
我所说的“纯直通”是什么意思 -> _proxy方法的实现不应受到对proxiedMethod的(非)兼容更改的影响,假设函数名称不变(SOLID 原则)。显然,呼叫者_proxy需要,如果要修改proxiedMethod是不兼容的改变(即我不打算对_proxy是一个适配器,但是这将是一个可能性)。
在函数定义中采用“任何东西”的通用方法是使用*args, **kwargs.
在调用另一个函数时,相同的语法用于传递这些参数。
def _proxy(*args, **kwargs):
return proxiedFunc(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
single *(eg *args) 捕获位置参数,double (eg **kwargs) 捕获关键字参数。
args并且kwargs是您为这些参数容器提供的名称。按照惯例,“any-positional-args”参数的名称是argsor a(其类型是tuple),“any-keyword-args”参数的名称是kwargsor kw(其类型是dict)。