通过创建处理程序避免重复代码 class

Avoiding repeating code by creating a handler class

我是 Python 的新手,正在努力避免一遍又一遍地重复相同的代码。我目前正在使用 Raspberry Pi 在几个不同的 classes 中使用 GPIO,而不是写

servoPin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPin,GPIO.IN)

在几个不同的 classes 中,我希望将所有 GPIO 事件捆绑在各种 PinHandler 中..

所以,我为我的处理程序想到了类似的东西 class

import RPi.GPIO as GPIO
 class PinHandler:
  def __init__(self):
   self.servoPin = 17
   GPIO.setmode(GPIO.BCM)
   GPIO.setup(self.servoPin,GPIO.IN)
  def getPinStatus(self,pin):
   return GPIO.input(pin)
  def addEventListener(self,functionName)
   GPIO.add_event_callback(self.servopin, functionName)

然后在我的其他 classes 中,我只需要输入

from pinHandler.py import PinHandler
import time

pinHandler = PinHandler()

pinHandler.addEventListener(myAwesomeFunction)

def myAwesomeFunction:
 pass

这会将回调添加到 pinHandler 范围之外的 myAwesomeFunction。我走在正确的轨道上还是有更好的方法?

更完整的OOP设计:

import RPi.GPIO as GPIO

class PinHandler:
    """
    Base class, wrapts all GPIO tasks
    """
    def __init__(self, pin):
        self.pin = pin
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.pin,GPIO.IN)

    def getPinStatus(self,pin):
       return GPIO.input(pin)

    def add_event_callback(self, callback)
        GPIO.add_event_callback(self.pin, callback)

from pinHandler.py import PinHandler


class Servo(PinHandler):
    """
    Spezialized class, handle all `Servo` related
    """
    def __init__(self):
        super().__init__(17)
        self.add_event_callback(self.event_listener)

    def event_listener(self, event):
        # handle event
        pass

Usage:

servo = Servo()