我正在用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?
谢谢!
答案 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__
,keys
,items
,values
,get
,__eq__
,__ne__
,pop
,popitem
,clear
,{ {1}}和update
)。还不错......
答案 1 :(得分:0)
使用:
def __init__(self, *args, **kwargs):
然后根据需要对args
和kwargs
的值进行逻辑。
答案 2 :(得分:0)
您可以使用type(args[i])
或args[i].__class__.__name__
来确定您的参数是tuple
还是dict
并相应地处理args[i]
。