在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)的答案