代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

实例方法作为函数对象

  •  0
  • sds Niraj Rajbhandari  · 技术社区  · 7 年前

    我需要将实例方法作为参数传递给函数:

    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 回复  |  直到 7 年前
        1
  •  1
  •   cs95 abhishek58g    7 年前

    operator.methodcaller

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

    methodcaller 返回将对传递给它的给定实例调用方法的可调用函数。

        2
  •  2
  •   John Zwinck    7 年前

    你可以做到这一点:

    f([x], C.m)
    

    在这里, C.m 是没有实例的方法。它和你的羔羊一样。它绝对是官方支持的功能。