在Python中调用函子

在Python中调用函子,python,Python,应该很容易,但不知为什么我不明白。我想应用一个给定的函数。后台是复制一个类,并在新创建的副本上应用给定的方法 主要编辑。很抱歉。 import copy class A: def foo(self,funcName): print 'foo' funcName() def Bar(self): print 'Bar' def copyApply(self,funcNam

应该很容易,但不知为什么我不明白。我想应用一个给定的函数。后台是复制一个类,并在新创建的副本上应用给定的方法

主要编辑。很抱歉。

   import copy
   class A:

       def foo(self,funcName):
           print 'foo'
           funcName()

       def Bar(self):
           print 'Bar'

        def copyApply(self,funcName):
           cpy = copy.copy()
           # apply funcName to cpy??

    a = A()
    func = a.Bar()
    a.foo(func) # output 'Bar'
    b = a.copyApply(foo) # new copy with applied foo

请注意,
A.foo
不是函数名,而是函数本身

class A:
   def bar(self):
       print 'Bar'

   def apply(self, func):
       func()  # call it like any other function

   def copyApply(self, func):
       cpy = copy.copy(self)
       func(cpy)  # cpy becomes the self parameter

a = A()
func = a.bar  # don't call the function yet

a.apply(func)       # call the bound method `a.bar`
a.apply(a.bar)      # same as the line above
a.copyApply(A.bar)  # call the unbound method `A.bar` on a new `A`

在python中,
a.foo()
a.foo(a)
相同,其中
a
a
类型。因此,您的
copyApply
方法将unbound bar方法作为其参数,而
foo
将使用绑定方法。

如果您希望对实例的副本调用方法

class A (object):
    def foo(self):
        pass

    def copyApply(self,func):
        cpy = copy.copy(self)
        func(cpy)
就这样说吧

a = A()
a.copyApply(A.foo) 

注意,我从类中获取的是方法
foo
,而不是实例,因为
A.foo
希望
A
的实例作为第一个参数,而
A.foo
不接受任何参数。

对不起,是否要对副本调用方法?是的。我无法使用getattr(),因为funcName不是函数的名称。应该是
cpy=copy.copy(self)
?您正在复制什么?@RParadox您希望使用
A.foo
作为函数参数传递。请参阅我(和Eric)的答案