这是在micropython中
我正在创建一个API以控制某些硬件。该API将在C中通过micropython中的接口实现。
我的API的一个示例是:
device.set(curr_chan.BipolarRange, curr_chan.BipolarRange.state.ON)
我希望能够实现相同的功能,但通过某种方式隐式引用第一个参数来缩短第二条路径:
device.set(curr_chan.BipolarRange, <first arg?>.state.ON)
反正有这样做吗?
现在要做 这样的唯一方法就是
device.set(curr_chan.BipolarRange.state.ON)
然后在ON
C对象和state
C对象上都放置一个指向上方的C指针,这样我就知道curr_chan
中的哪个条目被引用了。>
micropython运行时-我假设是CPython一次-不会将整个对象“树”保留给开发人员在内存中。
答案 0 :(得分:1)
对于第二个(状态)参数,您可以具有特殊的值,该值告诉函数实现从第一个参数导出状态。您还可以引入一个完全独立的函数来实现此功能。
或者您可以具有帮助程序功能,该功能确定状态并将其传递给set
函数,如下所示:
device.set(*state_ON(curr_chan.BipolarRange))
在这里,state_ON
将返回一个元组(curr_chan.BipolarRange, curr_chan.BipolarRange.state.ON)
。
在任何情况下,都无法直接支持您要在Python本身中尝试执行的操作。
答案 1 :(得分:1)
将所需属性的名称用作第二个参数。反复调用getattr
(或PObject_GetAttr
,以获取由func myfunc
分隔的字符串的每个元素:
myfunc