繁体   English   中英

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

[英]How to pass a function as a parameter to a class in python

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

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()

你尝试了吗?

答案是肯定的

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()

这种自省在部署的代码中有点冒险...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM