gpt4 book ai didi

用于全局范围的 Python __setattr__ 和 __getattr__?

转载 作者:太空狗 更新时间:2023-10-30 03:07:52 25 4
gpt4 key购买 nike

假设我需要创建自己的小型 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 表达式的这种“引用”功能?

最佳答案

我不确定这是个好主意,但我想我会 give it a try .总结:

class PermissiveDict(dict):
default = None

def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
return self.default

def exec_with_default(code, default=None):
ns = PermissiveDict()
ns.default = default
exec code in ns
return ns

关于用于全局范围的 Python __setattr__ 和 __getattr__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com