使用用户输入设置属性

Using user input to set attribute

免责声明:我已经搜索了几天,运气不佳。尽管如此,如果某处已经有了答案,我将不胜感激任何人指点我。

我一直在玩弄 RPi.GPIO 和 python(目前是 3.6),但在设置某些属性时遇到了一个小问题。我一直在尝试找到一种使用用户输入来设置属性的方法,方法如下:

mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = "GPIO." + mode
setattr(GPIO, "setmode", mode_chosen)

显然,上面的代码将属性设置为GPIO.BCMGPIO.BOARD作为字符串,这当然是行不通的。我可以编写一个 if-else 循环来调用 GPIO.setmode(GPIO.whatever),具体取决于用户输入,但我想知道是否有更优雅的方法。

我对 python 比较陌生,所以我可能在这里遗漏了一些重要信息,所以...提前感谢任何花时间回答的人。

您可以使用getattr从GPIO模块获取属性,然后在setattr中使用:

mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = getattr(GPIO, mode)
setattr(GPIO, "setmode", mode_chosen)

一种方法是使用字典:

choices = { "BCM": GPIO.BCM, "BOARD": GPIO.BOARD }
mode_chosen = choices[mode]