Как избежать повторения кода путем создания класса обработчика - PullRequest
1 голос
/ 19 сентября 2019

Я новичок в Python и стараюсь не повторять один и тот же код снова и снова.В настоящее время я работаю с Raspberry Pi, который использует GPIO в нескольких разных классах, поэтому вместо того, чтобы писать

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

в нескольких разных классах, я надеялся связать все события GPIO в своего рода PinHandler ..

Итак, я подумал о чем-то подобном для своего класса обработчика

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)

, а затем в других моих классах все, что мне нужно напечатать, это

from pinHandler.py import PinHandler
import time

pinHandler = PinHandler()

pinHandler.addEventListener(myAwesomeFunction)

def myAwesomeFunction:
 pass

Это будетдобавьте обратный вызов к myAwesomeFunction, который выходит за рамки pinHandler.Я на правильном пути или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 19 сентября 2019

Более полная конструкция ООП:

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

Использование :

servo = Servo()
...