Python中dict实现的构造函数

时间:2014-10-03 05:48:12

标签: python

我正在用Python实现一个TreeDict(使用BinarySearchTree)

我很难为它创建构造函数: 以下是我需要处理的一些案例:

1. dict = TreeDict()                               
2. dict = TreeDict((x, str(x)) for x in range(50))  
3. dict = TreeDict({"1" : 1, "2" : 2})
4. dict = TreeDict(one = 1, two = 2)

我的构造函数有这些:

def __init__(self, key=None, value=None, *args, **kwargs):

所以,

案例#1:它将创建一个空的TreeDict

案例#4:它会将关键字args存储在kwargs中

我们如何处理案例#2和#3?

谢谢!

3 个答案:

答案 0 :(得分:2)

在这些情况下,最好使用python已经提供的ABC之一(抽象基类):

from collections import MutableMapping

class TreeDict(MutableMapping):
    def __init__(self, *args, **kwargs):
        super(TreeDict, self).__init__()
        self.update(*args, **kwargs)
    ...

我们的想法是,集合提供了许多方法,您只需要根据自己提供的几种方法进行映射。在这种情况下,您需要提供:

__getitem____setitem____delitem____iter____len__以及其余收藏品(__contains__keysitemsvaluesget__eq____ne__poppopitemclear,{ {1}}和update)。还不错......

答案 1 :(得分:0)

使用:

def __init__(self, *args, **kwargs):

然后根据需要对argskwargs的值进行逻辑。

答案 2 :(得分:0)

您可以使用type(args[i])args[i].__class__.__name__来确定您的参数是tuple还是dict并相应地处理args[i]