2014-11-03 78 views
-3

我正在一個項目上工作,我想創建一個Python dict子類,然後再使用它。我需要在__init__中指定self.key屬性,我不確定這是否是最佳方式。Python樹/字典

這是我到目前爲止。

Class GoDown(dict): 
    def __init__(self, *args, **kw): 
     dict.__init__(self, *args, **kw) 
     self.key = dict.keys() # I know this is incorrect this is where I am stuck 

if __name__ == '__main__': 
    t = GoDown(d=1) 

在上面的例子我想t.key等於'd'。我只是不知道用dict子類來做到這一點的最佳方式。

+2

...什麼?你以後的意思是't.key =='d''應該是'True'? '1'應該發生什麼?或者你的意思是't.key == 1',在這種情況下,'d'是什麼意思(爲什麼不是'key = 1')? – jonrsharpe 2014-11-03 14:39:08

+0

我假設,也許錯誤,在上述情況下D =鍵和1 =值。我希望我的self.key等於'D'。 – 2014-11-03 14:42:54

+2

如果傳入多個關鍵字參數會怎麼樣?怎麼樣的位置參數?你究竟想要達到什麼目的(以及'GoDown'應該加上一個vanilla'dict')? – jonrsharpe 2014-11-03 14:43:46

回答

1

您可以實現此,如下所示:

class GoDown(dict): 
    """Dictionary with an additional attribute recording the initial key.""" 

    def __init__(self, **kwargs): 
     if len(kwargs) != 1: 
      raise TypeError("Exacly one keyword argument required.") 
     super(GoDown, self).__init__(**kwargs) 
     self.key = kwargs.keys()[0] 

這防止用戶通過除去*args和檢查的kwargs長度傳遞附加的位置或關鍵字參數。

0

另一種方法是使用現成的使用樹結構 https://github.com/caesar0301/pyTree

pyTree還提供了可視化posibility樹:

Harry[harry] 
|___ Jane[jane] 
| |___ Diane[diane] 
|   |___ George[george] 
|    |___ Jill[jill] 
|   |___ Mary[mary] 
| |___ Mark[mark] 
|___ Bill[bill]