2015-09-25 2 views
5

Если я определяю свою функцию, как показано ниже:Как сравнить завернутые функции с functools.partial?

def myfunc(arg1, arg2): 
    pass 

затем myfunc == myfunc вернется True

Но functools.partial(myfunc, arg2=1) == functools.partial(myfunc, arg2=1) вернется False.

Для цели unittest существует ли простой способ проверить, является ли частичная функция той, которую я ожидаю?

ответ

8

тест, если атрибуты func, args и keywords одинаковы:

p1.func == p2.func and p1.args == p2.args and p1.keywords == p2.keywords 

где p1 и p2 оба 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 

Был bug filed in the Python tracker добавить тестирование равенства в partial объекты, которые делают это по существу, но он был отклонен на том основании, что не имеетМетодзатеняет поведение функций, которые также равны, если совпадают их id().

+1

Есть ли веские причины, по которым объекты 'functools.partial' не реализуют это в стандартном' __eq__'? – doublep

Смежные вопросы