如何将函数作为参数传递给python中的类

时间:2014-04-04 23:27:37

标签: python oop

我想在初始化时将函数传递给类。这是我提出的一个玩具示例,它起作用:

def addition(self):
        return self.a + self.b


def multiplication(self):
    return self.a * self.b


class Test:

    def __init__(self, a, b, fcn):
        self.a = a
        self.b = b
        self.fcn = fcn

t = Test(3, 3, addition)

print t.fcn(t)

t = Test(3, 3, multiplication)

print t.fcn(t)

是否可以像调用任何其他类方法一样简单地调用t.fcn()

1 个答案:

答案 0 :(得分:3)

你试过吗?

答案是肯定的

def do_op(x,y,fn):
   return fn(x,y)

def add(a,b):
   return a+b

print do_op(5,4,add)

与班级相同

class whatever:
      def __init__(self,fn):
         self.fn = fn
      def do_it(self,*args,**kwargs):
         return self.fn(*args,**kwargs)
         #if you wanted the fn to have self as the first argument
         #return self.fn(self,*args,**kwargs) #just pass self as first argument

x = whatever(add)
print x.do_it(5,8)

进一步按照你的要求(如果我正确阅读)

def add(self):
   return self.a + self.b

class whatever:
      def __init__(self,fn,a,b):
         self.__dict__[fn.__name__] = fn
         self.a,self.b = a,b
      def do_it(self):
         return self.fn(self)

x = whatever(add,6,7)
x.do_it()

或者你想要像

这样的东西
from functools import partial
def add(self):
   return self.a + self.b
class whatever:
      def __init__(self,fn,a,b):
         self.__dict__[fn.__name__] = partial(fn,self)
         self.a,self.b = a,b

x = whatever(add,5,6)
x.add()

这种内省在部署的代码中有些冒险......