在Python中调用函子

2024-10-03 11:15:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

主要编辑。很抱歉。

   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

Tags: 方法函数self编辑foodef副本bar
2条回答

如果要对实例的副本调用方法

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

    def copyApply(self,func):
        cpy = copy.copy(self)
        func(cpy)

就这么说吧

^{pr2}$

注意,我是从类中获取方法foo,而不是实例,因为A.foo需要一个{}的实例作为第一个参数,a.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是{}类型。因此,copyApply方法采用未绑定的条方法作为其参数,而^{则采用绑定方法。在

相关问题 更多 >