__getattr __()可以确定它是否是嵌套的点属性访问序列的一部分吗?

时间:2016-02-17 13:07:04

标签: python

对于我的应用程序(使用命名位域建模硬件寄存器),我想支持这样的语法来访问字段:

device.REG0.F0 = 1    # access some defined subset of bits
print device.REG0.F0 

但也允许以整数形式访问整个寄存器:

device.REG0 = 123     # access all bits
print device.REG0

为了支持这一点,外部对象上的__getattr__()需要确定它是否是对某个最内层字段的访问的一部分(在这种情况下返回寄存器对象以进行进一步的__get/setattr__()处理),或者只是访问整个寄存器(在这种情况下返回整数值)。

通过inspect模块查看来电者上下文的来源文本,我有一个半概念的概念验证工作,但它很容易被打破。是否有一些更可靠的方法来获得关于当前现场的AST或其他语法信息'在代码?

或者,是否有其他方法可以提供所需的语法:

  • 某个对象在适当的上下文中隐式产生整数的某种方式?
  • 某种方式来模拟属性的属性?
  • 其他一些魔法?

注意:我意识到我可以使用不同的语法实现所需的功能。这个特定的语法对我很重要。

0 个答案:

没有答案