首页 > 编程 > Python > 正文

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

2020-02-23 00:17:53
字体:
来源:转载
供稿:网友

getattr

`getattr`函数属于内建函数,可以通过函数名称获取
代码如下:
value = obj.attribute
value = getattr(obj, "attribute")

使用`getattr`来实现工厂模式
代码如下:
#一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出

import statsout

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

__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__

__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__获得的

__setattr__

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

__delattr__

`__delattr__`函数式用来删除对象的属性:
代码如下:
class A(object):
    def __delattr__(self, *args, **kwargs): 
        print 'call func del attr' 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表