zoukankan      html  css  js  c++  java
  • python3 与dict相关的魔法方法。使用于二叉搜索树的类中

    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


    实例:

      在二叉搜索树中定义__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 = BinarySearchTree()
    tree[16] = 'a'
    print(tree[16])

    -- a

  • 相关阅读:
    致初学作曲的业余音乐爱好者 (转载)
    OpenGL教程 "Top Ten" (转载)
    开发者:我们应该在哪个层次编写代码?
    计算机科学数学理论浅谈 (转载)
    fltk2更新简介
    搜集的优良OpenGL教程 (转载)
    [转载] 跨平台C++程序开发系列文章
    通过HtppWebRequest发送图片到服务器并保存
    技术之外
    Hibernate写查询语句注意事项
  • 原文地址:https://www.cnblogs.com/marvintang1001/p/11156514.html
Copyright © 2011-2022 走看看