如果使用python导入模块的语句是好是坏?

时间:2018-06-19 13:16:11

标签: python oop if-statement raspberry-pi python-import

假设我们正在为多块板创建一个gpio引脚接口。例如:

if board == "raspberrypi":
    import RPi.GPIO as gpio
elif board == "bananapi":
    import BPi.GPIO as gpio

gpio.setmode(gpio.BCM)


class Pin:
    def __init__(self, pinNo):
        self.pin = pinNo

    def set(self):
        gpio.output(self.pin, 1)

这种方法看起来非常简单明了。但是,我不确定如何对它进行单元测试。但是我见过人们这样做。当具有不同于RPi.GPIO的方法的GPIO模块进入时会发生什么?

另一种方法是创建GPIO接口,并具有一个适配器,以确保GPIO模块适合该接口。

class GPIOInterface:
    __metaclass__ = ABCMeta

    @abstractmethod
    def set(self, pin: int):
        pass


import RPi.GPIO
class GPIORaspberryAdapter(GPIOInterface):
    def __init__(self):
        RPi.GPIO.setmode(RPi.GPIO.BCM)

    def set(self, pin: int):
        RPi.GPIO.output(pin, 1)

然后您只需将其注入Pin类中即可:

class Pin:
    def __init__(self, pinNo: int, gpio:GPIOInterface):
        self.pin = pinNo
        self.gpio = gpio

    def set(self):
        self.gpio.set(self.pin)

哪种方法更好,为什么?

0 个答案:

没有答案