python3 与dict相关的魔法方法。使用于二叉搜索树的类中
2020-12-13 05:56
标签:init name 实例 article 属性 作用 sdn 重写 target Python的魔术方法一般以__methodname__的形式命名,如:__init__(构造方法), __getitem__、 __setitem__(subscriptable所需method), __delitem__(del obj[key]所需method), __len__(len(…)所需method)等。 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__、__setitem__、__delitem__、__len__方法去模拟。 魔术方法的作用: __getitem__(self,key):返回键对应的值。 __setitem__(self,key,value):设置给定键的值 __delitem__(self,key):删除给定键对应的元素。 __len__():返回元素的数量 这些魔术方法的原理就是:当我们对类的属性item进行下标的操作时,首先会被__getitem__()、__setitem__()、__delitem__()拦截,从而进行我们在方法中设定的操作,如赋值,修改内容,删除内容等等。 原文:https://blog.csdn.net/liweiblog/article/details/54907888 具体实现: tree = BinarySearchTree() -- a python3 与dict相关的魔法方法。使用于二叉搜索树的类中 标签:init name 实例 article 属性 作用 sdn 重写 target 原文地址:https://www.cnblogs.com/marvintang1001/p/11156514.html
实例:
在二叉搜索树中定义__setitem__方法能模仿dict中增加键-值对,__getitem__模仿dict获取value
class BinarySearchTree(object):
def __init__(self):
self.root = None
self.size = 0
def length(self):
return self.size
def __len__(self):
return self.size
# 增加dict
def put(self, key, value):
if self.root:
self._put(key, value, self.root)
else:
self.root = TreeNode(key, value)
self.size = self.size + 1
def _put(self, key, value, currentNode):
if key currentNode.key:
if currentNode.hasLeftChild():
self._put(key, value, currentNode.leftChild)
else:
currentNode.leftChild = TreeNode(key, value, parent=currentNode)
elif key == currentNode.key:
currentNode.value = value
else:
if currentNode.hasRightChild():
self._put(key, value, currentNode.rightChild)
else:
currentNode.rightChild = TreeNode(key, value, parent=currentNode)
def __setitem__(self, key, value):
self.put(key, value)
# 获取value:
def get(self, key):
if self.root:
res = self._get(key, self.root)
if res:
return res.value
else:
return None
else:
return None
def _get(self, key, currentNode):
if currentNode is None:
return None
elif currentNode.key == key:
return currentNode
elif currentNode.key > key:
return self._get(key, currentNode.leftChild)
else:
return self._get(key, currentNode.rightChild)
def __getitem__(self, item):
return self.get(item)
效果:
tree[16] = ‘a‘
print(tree[16])
文章标题:python3 与dict相关的魔法方法。使用于二叉搜索树的类中
文章链接:http://soscw.com/essay/32063.html