在Python中调用存储在object中的方法而不提供self
如果你有一个类可以存储一个函数,在我的例子中,它被用作回调函数,我想调用这个函数,而不必把self作为参数,我该怎么做呢?例如:在Python中调用存储在object中的方法而不提供self,python,class,object,callback,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)的快捷方式 编辑:更新问题
class foo:
def __init__(self, fun):
self.fun = fun
def call_fun(self):
self.fun()
现在,我本以为这会是一种乐趣:
def fun(foreign_self):
pass
因为我希望object.fun()是fun(object)的快捷方式
编辑:更新问题以正确反映情况
现在,这迫使乐趣看起来像:def-fun(外来的)
不,没有。
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>>
foo类:
定义初始(自我,乐趣):
self.fun=乐趣
def呼叫乐趣(自我):
打印(self.fun)
#
self.fun()
def fun():
打印(‘有趣’)
f=foo(乐趣)
f、 乐趣
#“开玩笑”
f、 叫_fun()
#“开玩笑”
打印(f.call_fun)
#
请注意,
fun
是一个函数,而call\u fun
是一个实例方法call\u fun
只是碰巧通过实例中保存的引用调用了fun
函数。谢谢,但现在我感到困惑。我真的认为“object.fun”只是“fun(object)”的一个惯例。这是怎么回事?@Robert在本例中是f.fun()
只是将fun
函数作为函数运行,而不是作为方法运行。它与f
实例无关,只是对象保留了函数的“快捷方式”print(f.fun)#
而不是
如果它是一个方法。@Robert也看到了我的更新答案,我添加了一个小解释和一些示例输出。@Robert cf了解函数作为对象属性调用时如何成为(或在本例中不成为)方法的更多信息。长话短说:函数必须是类的一个属性才能产生一个方法-如果它是实例的一个属性,它仍然是一个普通函数。“这迫使fun
看起来像…”-你怎么会这样认为?