Python中有一個(gè)有趣的語法,只要定義類型的時(shí)候,實(shí)現(xiàn)call函數(shù),這個(gè)類型就成為可調(diào)用的。
換句話說,我們可以把這個(gè)類的對(duì)象當(dāng)作函數(shù)來使用,相當(dāng)于重載了括號(hào)運(yùn)算符。setattr, getattr, delattr為操作對(duì)象屬性的調(diào)用
class storage(dict):
#通過使用__setattr__, __getattr__, __delattr__
#可以重寫dict,使之通過“.”調(diào)用
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__方法用于實(shí)例自身的調(diào)用
#達(dá)到()調(diào)用的效果
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默認(rèn)行為
print s.name#這是__getattr__起的作用
del s.name#這是__delattr__起的作用
print s("name")
print s["name"]
print s.name