具有嵌套和属性查找的字典?

我正在寻找一个类似命名空间的对象,它在获取和设置项目时的行为类似于 Python 评估上下文,大致相当于以下不安全示例:

from collections import UserDict

class UnsafeNamespaceDict(UserDict):
    def __getitem__(self, var):
        return eval(var, {}, self.data)

    def __setitem__(self, var, val):
        return exec(f'{var} = val', {'val': val}, self.data)

您可以通过访问嵌套数据或属性的查找来查看预期行为:

>>> nd = UnsafeNamespaceDict()
>>> nd['x'] = 'abc'
>>> nd['x[1]']
'b'
>>> nd['x.count']
<built-in method count of str object>
>>> nd['x[1].count']
<built-in method count of str object>

设置不存在的项目以自然的方式失败:

>>> nd['y.z'] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __setitem__
  File "<string>", line 1, in <module>
NameError: name 'y' is not defined

元组拼接工作:

>>> nd['a, b, c'] = 'ABC'
>>> nd['c']
'C'

如何使示例类安全(删除evalexec),同时仍至少允许嵌套查找和属性访问?

以上是具有嵌套和属性查找的字典?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>