首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多后端编程

多后端编程
EN

Software Engineering用户
提问于 2015-06-06 19:43:49
回答 1查看 213关注 0票数 2

我目前的项目是一个高级抽象包,用于在那些漂亮的SoC-计算机上进行GPIO编程(Raspberry Pi、Cubieboard、Beaglebone Black、Pandaboard等)。我的目标之一是能够使用不同的GPIO模块作为后端在不同的板上运行相同的代码,比如Raspberry上的RPi.GPIO,或者Cubieboard上的SUNXI_GPIO。

目前,我有这样的代码:

代码语言:javascript
复制
class Pin(object):
    def __init__(self, gpio, direction, pud=None):
        self.gpio = gpio
        self.direction = direction
        self.pud = pud
        _GPIO_BACKEND.setuppin(self.gpio, self.direction, self.pud)

    def __str__(self):
        return self.gpio

class InputPin(Pin):
    """docstring for InputPin"""
    def read(self):
        _GPIO_BACKEND.read(self.gpio)

class OutputPin(Pin):
    """docstring for OutputPin"""
    def high(self):
        _GPIO_BACKEND.high(self.gpio)

    def low(self):
        _GPIO_BACKEND.low(self.gpio)

我希望_GPIO_BACKEND通过加载后端的上下文管理器进行设置。后端本身看起来如下(RPi.GPIO示例):

代码语言:javascript
复制
from RPi import GPIO as _GPIO

def init(numberscheme='bcm'):
    """docstring for init"""
    if numberscheme.lower() == 'bcm':
        _GPIO.setup(_GPIO.BCM)
    elif numberscheme.upper() == 'board':
        _GPIO.setup(_GPIO.BOARD)

def setuppin(id, direction, pullupdown=None):
    """docstring for setuppin"""
    if direction.lower() == 'in':
        dir = _GPIO.IN
    elif direction.lower() == 'out':
        dir = _GPIO.OUT
    else:
        raise ValueError

    if pullupdown is None:
        pud = _GPIO.PUD_ # TODO
    elif pullupdown.lower() == 'up':
        pud = _GPIO.PUD_UP
    elif pullupdown.lower() == 'down':
        pud = _GPIO.PUD_DOWN
    else:
        raise ValueError

    _GPIO.setmode(id, dir, pud)

def cleanup():
    """docstring for cleanup"""
    _GPIO.cleanup()

def high(id):
    """docstring for high"""
    _GPIO.output(id, _GPIO.HIGH)

def low(id):
    """docstring for low"""
    _GPIO.output(id, _GPIO.LOW)

def read(id):
    """docstring for read"""
    return _GPIO.input(id)

我不喜欢的是依赖一个伪不可见的全局变量(_GPIO_BACKEND)。

什么是一个好的,适当的,和pythonic的方式来编程到多个后端这样?

EN

回答 1

Software Engineering用户

发布于 2015-07-20 18:31:58

你不能用经典的面向对象的概念来处理这个问题吗?例如,每个后端可以实现为一个具有公共接口的类,InputPin和OutputPin类将以一种组合的方式使用它们。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/286045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档