python 3在具有固定参数的第三方回调函数中使用self

时间:2018-12-14 00:17:33

标签: python-3.x callback raspberry-pi

我希望标题是清楚的,但我认为不是,这仍然是我能够为我的问题提供的最佳解释。 所以: 我正在开发一个使用Pigpio的类(我们称之为myclass)。在此模块内部,可以在引脚状态更改时注册用户定义的回调函数。该回调必须具有三个参数:GPIO,级别,滴答(在模块文档中对此进行了很好的解释)。 我想做的是在使用myclass的脚本中定义回调函数,这可能会从实例化的myclass对象中调用一个函数。 我试过的是这样的:

# script using myclass module
import pigpio

def ext_callback(obj):
''' some other stuff '''
   print(obj.do_action())

pio=pigpio.pi()
instance_obj=myclass(25, pio, ext_callback)
#here i keep the script alive to wait for the callback to run

# myclass definition (on antoher file imported into the script using it, pio is pigpio.pi() passed as parameter)
import pigpio

def __init__(PIN, pio, ext_callback):
   self.pi=pio
   self.int_callack=ext_callback
   self.pi.callback(PIN, pigpio.RISING_EDGE, self.callback_fun) #callback is the third party function with fixed three parameters number

def do_action(self):
   return 'something'

def callback_fun(self, GPIO, level, tick):
   self.int_callback(self)

我收到一条错误消息,该函数应使用3个位置参数,但给出了4个位置参数(是的,是的,我给出了4个参数)。 我显然做错了,我的问题是: 有没有办法(如果可以的话)从类的外部定义回调过程,并将其作为参数传递给myclass实例以使其注册回调,从而允许外部过程最终从物体?如果(可能)我没有很好地解释它,请问我,我会尝试做得更好。感谢大家的帮助!

0 个答案:

没有答案