diff --git a/python_magic_methods.py b/python_magic_methods.py index 51dde49..ddbbe86 100644 --- a/python_magic_methods.py +++ b/python_magic_methods.py @@ -22,29 +22,26 @@ class People(object): print("\t".join([str(item) for item in sorted([People("abc", 18), People("abe", 19), People("abe", 12), People("abc", 17)])])) -# Python实现任意深度的赋值 例如a[0] = 'value1'; a[0][2] = 'value2'; a[0][2][3] = 'value3',构造出一颗多叉树类似结构 +# Python实现任意深度的赋值 例如a[0] = 'value1'; a[1][2] = 'value2'; a[3][4][5] = 'value3' class MyDict(dict): - def __init__(self,name=''): # 增加初始化函数,将需要放置的value存储到内部中 - self.name=name - def __str__(self): # 增加 __str__ 函数,将存储的元素输出出来 - return self.name + def __setitem__(self, key, value): # 该函数不做任何改动 这里只是为了输出 print("setitem:", key, value, self) - temp = MyDict(value) - super(MyDict,self).__setitem__(key, temp) + super().__setitem__(key, value) return def __getitem__(self, item): # 主要技巧在该函数 print("getitem:", item, self) # 基本思路: a[1][2]赋值时 需要先取出a[1] 然后给a[1]的[2]赋值 if item not in self: # 如果a[1]不存在 - temp = MyDict(item) # 则需要新建一个dict - super(MyDict,self).__setitem__(item, temp) # 并使得a[1] = dict + temp = MyDict() # 则需要新建一个dict + super().__setitem__(item, temp) # 并使得a[1] = dict return temp # 返回a[1] 使得a[1][2] = value有效 - return super(MyDict,self).__getitem__(item) # 如果a[1]存在 则直接返回a[1] + return super().__getitem__(item) # 如果a[1]存在 则直接返回a[1] # 使用例子: test = MyDict() test[0] = 'test' -test[0][2] = 'test1' -test[0][2][5] = 'test2' +test[1][2] = 'test1' +test[3][4][5] = 'test2' +print("==========================")