Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中调用存储在object中的方法而不提供self_Python_Class_Object_Callback - Fatal编程技术网

在Python中调用存储在object中的方法而不提供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)的快捷方式 编辑:更新问题

如果你有一个类可以存储一个函数,在我的例子中,它被用作回调函数,我想调用这个函数,而不必把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)的快捷方式

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

现在,这迫使乐趣看起来像:
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
看起来像…”-你怎么会这样认为?