Python 3 использует self в сторонней функции обратного вызова с фиксированными аргументами - PullRequest
0 голосов
/ 14 декабря 2018

Надеюсь, название понятно, но я думаю, что нет, но это лучшее объяснение, которое я могу дать моей проблеме.Итак: я занимаюсь разработкой класса (давайте назовем его myclass), который использует pigpio.Внутри этого модуля пользовательская функция обратного вызова может быть зарегистрирована при изменении статуса контакта.Этот обратный вызов должен иметь три параметра: 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 в качестве параметра, чтобы заставить его зарегистрироваться для обратного вызова,разрешить внешней процедуре в конечном итоге вызвать метод из объекта?Если (возможно) я не объяснил это хорошо, пожалуйста, спросите меня, и я постараюсь сделать лучше.Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...