2016-10-25 98 views
1

我想創建一個支持嵌套屬性的自定義對象。是否有可能在python中捕獲空的嵌套屬性?

我需要實現一種特定類型的搜索。

如果一個屬性不存在於最低級別,我想遞歸併查看屬性是否存在於更高級別。

我花了整整一天的時間嘗試做到這一點。我來的最近的是能夠打印屬性搜索路徑。

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

是的,這是可能的。在搜索例程中,重複到路徑的末尾,檢查所需的屬性。在底層,返回屬性,如果找到,否則。在每個非終端級別,再次下一級。

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 

這個僞代碼是否讓你朝着解決方案邁進?

+0

這很有趣 - 謝謝!我認爲這是它可能在python中完成的唯一方法。可以使用autogen(例如jinja2)創建這樣一個具有嵌套屬性的類,然後可以像這樣遞歸。我認爲這是不可能的。 – lifer

相關問題