假设我需要创建自己的小型 DSL,它会使用 Python 来描述某种数据结构。例如,我希望能够写出类似的东西
f(x) = some_stuff(a,b,c)
并且有 Python,而不是抱怨未声明的标识符或尝试调用函数 some_stuff,为了我的进一步方便,将其转换为文字表达式。
__getattr__
通过创建一个具有正确重新定义和__setattr__
方法的类并按如下方式使用它,可以得到一个合理的近似值:
e = Expression()
e.f[e.x] = e.some_stuff(e.a, e.b, e.c)
不过,如果可以摆脱烦人的“e”,那就太酷了。前缀,甚至可能避免使用 []。所以我想知道,是否有可能以某种方式暂时“重新定义”全局名称查找和分配?在相关的说明中,也许有很好的包可以轻松实现 Python 表达式的这种“引用”功能?