Метод экземпляра как функциональный объект - PullRequest
0 голосов
/ 10 июня 2018

Мне нужно передать метод экземпляра в качестве аргумента функции:

class C(object):
    def m(self):
        print("m",self)

def f(l,b):
    for z in l:
        b(z)

x = C()

f([x], lambda c: c.m())

Есть ли лучший способ, чем lambda?

Похоже, что f([x], C.m) работаеттоже, но это случайность или официальная особенность?

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Вы можете сделать это:

f([x], C.m)

Здесь C.m - это метод без экземпляра.Он делает то же самое, что и ваша лямбда.Это определенно официальная и поддерживаемая функция.

0 голосов
/ 10 июня 2018

operator.methodcaller

>>> from operator import methodcaller
>>> f([x], methodcaller('m'))
m <__main__.C object at 0x1317bbda0>

methodcaller возвращает вызываемый объект, который будет вызывать метод для данного переданного ему экземпляра.

...