如何在python中将函数传递给类的方法?

时间:2019-01-22 03:33:00

标签: python

我正在尝试编写一个东西,您可以将您的服务检查代码传递给它,并警告它是否返回false-在python中,如何将代码传递给事物的实例?

#!/usr/bin/env python

def service_check():
    print('service is up')

class Alerter():
    def watch(f):
        f()

watcher = Alerter()
watcher.watch(service_check())

返回:

service is up
Traceback (most recent call last):
  File "./service_alert", line 12, in <module>
    watcher.watch(service_check())
TypeError: watch() takes exactly 1 argument (2 given)

2 个答案:

答案 0 :(得分:3)

这是工作代码

def service_check():
print('service is up')

class Alerter():
  def watch(self,f):
    f()

watcher = Alerter()
watcher.watch(service_check)

如@ Tomothy32所述,有2个更改。

  1. 需要在def watch(self,f)中添加Self。这是因为,只要对象调用其方法,该对象本身就会作为第一个参数传递。
  2. 第二,我们应该传递函数指针watcher.watch(service_check)而不是函数调用watcher.watch(service_check())。

答案 1 :(得分:1)

watch()函数缺少用于self的参数,因此上述程序会引发异常。另外,您应该只传递函数的名称以在watcher.watch(service_check)中传递其地址,而不是通过service_check()进行调用。 程序应该可以按照@ arunraja-a的建议进行这些更改。