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'
新聞熱點
疑難解答