• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python __setattr__、 __getattr__、 __delattr__、__call__用法示例

Python __setattr__、 __getattr__、 __delattr__、__call__用法示例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了getattr setattr,python setattr,python setattr函数,python中setattr,python getattr等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

getattr

`getattr`函数属于内建函数,可以通过函数名称获取
value = obj.attribute
value = getattr(obj, "attribute")
</div>
使用`getattr`来实现工厂模式
#一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出

import statsout

def output(data, format="text"):                          
    output_function = getattr(statsout, "output_%s" %format)
    return output_function(data)
</div>

__call__

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

s = storage()
s['key'] = 'value'
print s(key) #调用__call__
</div>

__getattr__

从对象中读取某个属性时,首先需要从self.__dicts__中搜索该属性,再从__getattr__中查找。

class A(object): 
    def __init__(self): 
        self.name = 'from __dicts__: zdy' 
 
    def __getattr__(self, item): 
        if item == 'name': 
            return 'from __getattr__: zdy' 
        elif item == 'age': 
            return 26 
 
a = A() 
print a.name # 从__dict__里获得的 
print a.age # 从__getattr__获得的
</div>

__setattr__

`__setattr__`函数是用来设置对象的属性,通过object中的__setattr__函数来设置属性:
class A(object):
    def __setattr__(self, *args, **kwargs): 
        print 'call func set attr' 
        return object.__setattr__(self, *args, **kwargs)
</div>

__delattr__

`__delattr__`函数式用来删除对象的属性:
class A(object):
    def __delattr__(self, *args, **kwargs): 
        print 'call func del attr' 
        return object.__delattr__(self, *args, **kwargs) 
</div>

例子

完整例子可以参考微博API:http://github.liaoxuefeng.com/sinaweibopy/
class _Executable(object):

    def __init__(self, client, method, path):
        self._client = client
        self._method = method
        self._path = path
    #__call__函数实现_Executable函数对象为可调用的
    def __call__(self, **kw):
        method = _METHOD_MAP[self._method]
        if method==_HTTP_POST and 'pic' in kw:
            method = _HTTP_UPLOAD
        return _http_call('%s%s.json' % (self._client.api_url, self._path), method, self._client.access_token, **kw)

    def __str__(self):
        return '_Executable (%s %s)' % (self._method, self._path)

    __repr__ = __str__

class _Callable(object):

    def __init__(self, client, name):
        self._client = client
        self._name = name

    def __getattr__(self, attr):
        if attr=='get':
       #初始化_Executable对象,调用__init__函数
            return _Executable(self._client, 'GET', self._name)
        if attr=='post':
            return _Executable(self._client, 'POST', self._name)
        name = '%s/%s' % (self._name, attr)
        return _Callable(self._client, name)

    def __str__(self):
        return '_Callable (%s)' % self._name

    __repr__ = __str__
</div>

而在源码中,存在下面代码片段:

class APIClient(object):
    '''
    API client using synchronized invocation.
    '''
    ...

    def __getattr__(self, attr):
        if '__' in attr:
            return getattr(self.get, attr)
        return _Callable(self, attr)
</div>

因此,加入我们初始化对象,并调用某函数如下:
复制代码

您可能想查找下面的文章:

  • 全面了解Python的getattr(),setattr(),delattr(),hasattr()
  • 浅析Python中的getattr(),setattr(),delattr(),hasattr()
  • 全面了解Python的getattr(),setattr(),delattr(),hasattr()
  • 浅析Python中的getattr(),setattr(),delattr(),hasattr()
  • Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
  • Python __getattr__与__setattr__使用方法

相关文章

  • django 文件上传功能的相关实例代码(简单易懂)
  • Python实现压缩与解压gzip大文件的方法
  • Python Web框架Pylons中使用MongoDB的例子
  • 使用Python对Excel进行读写操作
  • 复制粘贴功能的Python程序
  • 10款最好的Web开发的 Python 框架
  • Python读写unicode文件的方法
  • 使用Python脚本对Linux服务器进行监控的教程
  • 深入理解Python中变量赋值的问题
  • 使用PYTHON创建XML文档

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python os模块学习笔记
    • Flask入门教程实例:搭建一个静态博客
    • Python 2.7.x 和 3.x 版本的重要区别小结
    • python完成FizzBuzzWhizz问题(拉勾网面试题)示例
    • Python读写配置文件的方法
    • 寻找网站后台地址的python脚本
    • 在Python的gevent框架下执行异步的Solr查询的教程
    • 浅析Python中MySQLdb的事务处理功能
    • 在Python中实现贪婪排名算法的教程
    • 使用C#配合ArcGIS Engine进行地理信息系统开发

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有