(微)类内的Python回调函数抛出类型错误

问题描述 投票:0回答:1

我对 Python 或多或少还是个新手,但在 OOP 方面仍然有些挣扎(来自 C - 而不是 C++)。 我想重用并扩展旋转编码器类,只想添加一个带有中断回调例程的开关。但它总是抛出错误:

from rotary_encoder.rotary_irq_esp import RotaryIRQ
from machine import Pin



class RotaryEncoder(RotaryIRQ):
  # rotary options
  RANGE_MODE = const(1) # 1->UNBOUNDED, 2->WRAP, 3->BOUNDED
  PIN_CLK = const(7)
  PIN_DT = const(8)
  PULL_UP = True

  # switch options
  PIN_SWITCH = const(6)
  PULL_UP_SWITCH = True
  
  def __init__(self, pin_num_clk=PIN_CLK, pin_num_dt=PIN_DT, min_val=0, max_val=10, incr=1,range_mode=RANGE_MODE, pull_up=PULL_UP,pin_switch=PIN_SWITCH,pull_up_switch=PULL_UP_SWITCH):
    super().__init__(pin_num_clk, pin_num_dt, min_val, max_val, incr, range_mode, pull_up)
    # add switch
    if pull_up_switch:
      self.switch = Pin(pin_switch,Pin.IN, Pin.PULL_UP)
      self.switch.irq(trigger=Pin.IRQ_FALLING, handler=self._rotary_switch_callback)
    else:
      self.switch = Pin(pin_switch,Pin.IN, Pin.PULL_DOWN)
      self.switch.irq(trigger=Pin.IRQ_RISING, handler=self._rotary_switch_callback)

  def _rotary_switch_callback(self):
    pass

你知道为什么它不起作用吗?

错误是: 类型错误:函数需要 1 个位置参数,但给出了 2 个

我尝试了几件事,但没有任何效果。 在另一个组件中,我在类中看到了一个没有(自身)参数的回调函数定义。这在这里也不起作用(顺便说一句,让我很困惑为什么类中的函数不是静态方法或类方法,而没有(自我)参数 - 但这是另一个主题:-)

我试过了

handler=self._rotary_switch_callback)
handler=_rotary_switch_callback)


def _rotary_switch_callback(self):
def _rotary_switch_callback():

python class callback typeerror esp32
1个回答
0
投票

我不知道什么是

self.switch.irq()
,但它似乎用一些额外的参数执行你的函数 - 例如
PIN
- 你必须得到它

def _rotary_switch_callback(self, parameter):

如果您不知道它将发送多少参数以及是否会发送位置参数或命名参数,那么您可以使用流行的

*args, **kwargs

def _rotary_switch_callback(self, *args, **kwargs):
    print('args:', args)
    print('kwargs:', kwargs)

© www.soinside.com 2019 - 2024. All rights reserved.