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 
  • 相关阅读:
    CSS 换行
    CSS div仿table样式
    CSS 选择器优先级
    ajax 请求前后处理
    JQuery 数组按指定长度分组
    JQuery .width()/.css("width")方法 比较
    JS 生成唯一值UUID
    JS/jQuery点击某元素之外触发事件
    JS/Jquery关系
    利用Nginxcp为cPanel/WHM服务器开启nginx支持
  • 原文地址:https://www.cnblogs.com/dkblog/p/1980557.html
Copyright © 2011-2022 走看看