zoukankan      html  css  js  c++  java
  • Python中有一个有趣的语法__call__

      Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。
      换句话说,我们可以把这个类的对象当作函数来使用,相当于重载了括号运算符。



    为了弄明白python中__setattr__, __getattr__, __delattr__, __call__的作用,重写dict,扩展其功能

    Code:

    class storage(dict):
    #通过使用__setattr__, __getattr__, __delattr__
    #可以重写dict,使之通过“.”调用
    def __setattr__(self, key, value):
    self[key] = value
    def __getattr__ (self, key):
    try:
    return self[key]
    except KeyError, k:
    return None
    def __delattr__ (self, key):
    try:
    del self[key]
    except KeyError, k:
    return None

    # __call__方法用于实例自身的调用
    #达到()调用的效果
    def __call__ (self, key):
    try:
    return self[key]
    except KeyError, k:
    return None

    s = storage()
    s.name = "hello"#这是__setattr__起的作用
    print s("name")#这是__call__起的作用
    print s["name"]#dict默认行为
    print s.name#这是__getattr__起的作用
    del s.name#这是__delattr__起的作用
    print s("name")
    print s["name"]
    print s.name


    参考:http://blog.sina.com.cn/s/blog_4be6d8870100dtnw.html 
  • 相关阅读:
    小程序自定义组件(3)子向父传参
    postgresql插件安装
    二进制减法的实现
    mysql锁表问题
    mysql查看修改参数
    众数问题-找出超过一半的数
    只出现一次的数
    元素最大间距离
    第一个缺失数字
    局部最小值位置
  • 原文地址:https://www.cnblogs.com/dkblog/p/1980557.html
Copyright © 2011-2022 走看看