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

2024-09-29 19:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不太熟悉,我尽量避免重复同一个代码。我目前正在使用一个Raspberry Pi,它在几个不同的类中使用GPIO,因此不需要编写

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

在几个不同的类中,我希望将所有GPIO事件捆绑在一个PinHandler中

所以,我为我的handler类想到了这样的东西

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的范围内。我是走对了路还是有更好的方法


Tags: inimportselfgpiodefsetuppinbcm
1条回答
网友
1楼 · 发布于 2024-09-29 19:34:06

更完整的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()

相关问题 更多 >

    热门问题