如何比较包装函数与functools.partial?

Lyd*_*dia 7 python functools

如果我定义我的功能如下:

def myfunc(arg1, arg2):
    pass
Run Code Online (Sandbox Code Playgroud)

然后myfunc == myfunc会回来True

functools.partial(myfunc, arg2=1) == functools.partial(myfunc, arg2=1)会回来False.

为了单元测试的目的,是否有一种简单的方法来测试部分功能是否是我期望的功能?

Mar*_*ers 10

如果测试的func,args并且keywords属性是相同的:

p1.func == p2.func and p1.args == p2.args and p1.keywords == p2.keywords
Run Code Online (Sandbox Code Playgroud)

where p1p2are都是partial()对象:

>>> from functools import partial
>>> def myfunc(arg1, arg2):
...     pass
... 
>>> partial(myfunc, arg2=1).func == partial(myfunc, arg2=1).func
True
>>> partial(myfunc, arg2=1).args == partial(myfunc, arg2=1).args
True
>>> partial(myfunc, arg2=1).keywords == partial(myfunc, arg2=1).keywords
True
Run Code Online (Sandbox Code Playgroud)

Python跟踪器中存在一个错误,用于向partial对象添加相等性测试,但基本上没有使用__eq__方法会影响函数的行为,但是如果它们的id()匹配也是相等的,它就被拒绝了.