我正在尝试创建一个支持嵌套属性的自定义对象。
我需要实施特定类型的搜索。
如果属性不存在于最低级别,我想递归并查看该属性是否存在于更高级别。
我花了一整天努力做到这一点。我最接近的是能够打印属性搜索路径。
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
如果它不存在于顶层。
你认为这是可能的吗?
非常感谢你!
答案 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
这个伪代码是否会让您转向解决方案?