是否可以在python中捕获空的嵌套属性?

时间:2016-10-25 01:56:43

标签: python dictionary recursion attributes nested

我正在尝试创建一个支持嵌套属性的自定义对象。

我需要实施特定类型的搜索。

如果属性不存在于最低级别,我想递归并查看该属性是否存在于更高级别。

我花了一整天努力做到这一点。我最接近的是能够打印属性搜索路径。

class MyDict(dict):
  def __init__(self):
    super(MyDict, self).__init__()

  def __getattr__(self, name):
    return self.__getitem__(name)

  def __getitem__(self, name):
    if name not in self:
      print name
      self[name] = MyDict()
    return super(MyDict, self).__getitem__(name)

config = MyDict()
config.important_key = 'important_value'
print 'important key is: ', config.important_key
print config.random.path.to.important_key

输出:

important key is:  important_value
random
path
to
important_key
{}

我需要做的是查看important_key是否存在于最低级别(config.random.path.to),然后上升级别(config.random.path)并仅返回None如果它不存在于顶层。

你认为这是可能的吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。在搜索例程中,重复到路径的末尾,检查所需的属性。在底层,如果找到则返回属性,否则返回。在每个非终端级别,重新进入下一级别。

if end of path   # base case
    if attribute exists here
        return attribute
    else
        return None
else  # some upper level
    exists_lower = search(next level down)
    if exists_lower
        return exists_lower
    else
        if attribute exists here
            return attribute
        else
            return None

这个伪代码是否会让您转向解决方案?