<Python> functools.partial для функций-членов
Когда ты пишешь obj.method тебе уже возвращается partially applied функция. Причём всегда, даже когда ты пишешь сразу obj.method(blah, blah) — вначале возвращается bound method, потом он применяется к аргументам.
Этим питон отличается от плюсов и сишарпа, где this подставляется нулевым аргументом на call site.
Если же тебе хочется применить произвольную функцию к произвольному объекту как если бы это был его метод, то не знаю, я не уверен, что это вообще возможно, а если и возможно, то только с очень суровой магией.
2 Fj: это ты к чему, вообще, наговорил-то?
Если же тебе хочется применить произвольную функцию к произвольному объекту как если бы это был его метод, то не знаю, я не уверен, что это вообще возможно, а если и возможно, то только с очень суровой магией.не вижу никаких препятствий.
да, obj.method — это (грубо говоря) сахар для partial(cls.method, obj но функция cls.method ничем не отличается от десятков миллионов других себе подобных.
Upd.
Да, но, очевидно, человеку нужно не это, а просто сделать из метода с аргументами метод без аргументов.
Типа есть список строк, надо вывести список индексов, где встречается строка 'a':
>>> finda = lambda s: s.find('a')
>>> [finda(s) for s in moi_stroki]
Напишу лямбду
from functools import partial
class C(object):
def m(self, x):
print 'base',x
class D(C):
def m(self, x):
print 'derived',x
f = partial(C.m, x=42)
f(C # base 42
f(D # base 42
Оставить комментарий
yroslavasako
В руководстве питона рекомендуют использовать partial вместо самописных лямбда-выражений. Передо мной стал вопрос о необходимости применения partial к функции func(self,*args,**kw). self является первым атрибутом, но его не нужно и нельзя фиксировать, а хочется фиксировать последующие, пропустив self. Какая конструкция для этого будет наиболее pythonic-way?