调用存储在object中的方法,而不用Python提供self

时间:2017-01-05 13:04:31

标签: python class object callback

如果你有一个可以存储函数的类,在我的情况下用作回调,我想调用这个函数而不必将self作为参数,我该怎么做?例如:

class foo:
  def __init__(self, fun):
    self.fun = fun

  def call_fun(self):
    self.fun()

现在,我原本期望这种力量看起来很有趣:

def fun(foreign_self):
  pass

因为我希望object.fun()成为fun(object)的快捷方式。

编辑:更新了问题以正确反映情况。

1 个答案:

答案 0 :(得分:3)

  

现在,这会让人觉得有趣:def fun(foreign_self)

不,它没有。 fun不必接受任何内容:

class foo:
    def __init__(self, fun):
        self.fun = fun

    def call_fun(self):
        print(self.fun)
        # <function fun at 0x02269588>
        self.fun()

def fun():
    print('in fun')

f = foo(fun)

f.fun()
# 'in fun'
f.call_fun()
# 'in fun'
print(f.call_fun)
# <bound method foo.call_fun of <__main__.foo object at 0x022239D0>>

请注意,fun是一个函数,而call_fun是一个实例方法。 call_fun恰好通过保留在实例中的引用来调用fun函数。