Python树/目录

Python树/目录,python,Python,我正在做一个项目,我想创建一个Pythondict子类,然后稍后再使用它。我需要在\uuu init\uuu中指定一个self.key属性,我不确定这样做的最佳方法 这就是我目前所拥有的 Class GoDown(dict): def __init__(self, *args, **kw): dict.__init__(self, *args, **kw) self.key = dict.keys() # I know this is incorrect

我正在做一个项目,我想创建一个Python
dict
子类,然后稍后再使用它。我需要在
\uuu init\uuu
中指定一个
self.key
属性,我不确定这样做的最佳方法

这就是我目前所拥有的

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
子类实现这一点的最佳方法。

您可以按如下方式实现:

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
的长度来传递额外的位置或关键字参数。另一种方法是使用现成的树结构

pyTree还提供了可视化树的可能性:

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

什么你的意思是以后
t.key='d'
应该是
True
1
会发生什么情况?或者你的意思是
t.key==1
,在这种情况下
d
的意思是什么(为什么不
key=1
)?我偏离了假设,可能是错误的,在上述情况下d=key和1=value。我希望我的self.key等于“D”。如果传入了多个关键字参数,该怎么办?位置参数呢?你到底想要实现什么(以及在普通的dict上应该添加什么?
goodown
)?可能是
self.key=kw.keys()[0]
(无需创建新的dict)。但是,你应该如何处理这个值呢?说实话,我在这里旋转我的轮子。我可以将它限制为init中的一个键和值。我想看看后来添加到dict中的项目,看看它是在这个初始self.key之前还是之后