亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python __setattr__、 __getattr__

系統(tǒng) 1949 0

getattr

`getattr`函數(shù)屬于內(nèi)建函數(shù),可以通過函數(shù)名稱獲取

復(fù)制代碼 代碼如下:

value = obj.attribute
value = getattr(obj, "attribute")

使用`getattr`來實現(xiàn)工廠模式
復(fù)制代碼 代碼如下:

#一個模塊支持html、text、xml等格式的打印,根據(jù)傳入的formate參數(shù)的不同,調(diào)用不同的函數(shù)實現(xiàn)幾種格式的輸出

import statsout

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

__call__

`__call__`方法用于實例自身的調(diào)用:

復(fù)制代碼 代碼如下:

class storage(dict):
??? # __call__方法用于實例自身的調(diào)用
??? #達(dá)到()調(diào)用的效果
??? def __call__ (self, key):
???????? try:
???????????? return self[key]
???????? except KeyError, k:
???????????? return None

s = storage()
s['key'] = 'value'
print s(key) #調(diào)用__call__

__getattr__

從對象中讀取某個屬性時,首先需要從self.__dicts__中搜索該屬性,再從__getattr__中查找。

復(fù)制代碼 代碼如下:

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__`函數(shù)是用來設(shè)置對象的屬性,通過object中的__setattr__函數(shù)來設(shè)置屬性:

復(fù)制代碼 代碼如下:

class A(object):
??? def __setattr__(self, *args, **kwargs):?
??????? print 'call func set attr'?
??????? return object.__setattr__(self, *args, **kwargs)

__delattr__

`__delattr__`函數(shù)式用來刪除對象的屬性:

復(fù)制代碼 代碼如下:

class A(object):
??? def __delattr__(self, *args, **kwargs):?
??????? print 'call func del attr'?
??????? return object.__delattr__(self, *args, **kwargs)?

例子

完整例子可以參考微博API:http://github.liaoxuefeng.com/sinaweibopy/

復(fù)制代碼 代碼如下:

class _Executable(object):

??? def __init__(self, client, method, path):
??????? self._client = client
??????? self._method = method
??????? self._path = path
??? #__call__函數(shù)實現(xiàn)_Executable函數(shù)對象為可調(diào)用的
??? 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對象,調(diào)用__init__函數(shù)
??????????? 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__

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

復(fù)制代碼 代碼如下:

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

??? def __getattr__(self, attr):
??????? if '__' in attr:
??????????? return getattr(self.get, attr)
??????? return _Callable(self, attr)

因此,加入我們初始化對象,并調(diào)用某函數(shù)如下:

復(fù)制代碼 代碼如下:

client = APIClient(...)
#會調(diào)用__getattr__函數(shù),從而調(diào)用__call__函數(shù)
client.something.get()


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天插天天射天天操 | 色在线播放 | 国产成人精品在线 | 最新午夜韩国理论片77网 | 亚洲成人免费在线 | 中国一级一级全黄 | 国产中文欧美 | 欧美成人一区亚洲一区 | 亚洲一区二区三区免费在线观看 | 国产乱码精品一区二区三区卡 | 国产日韩亚洲欧洲一区二区三区 | 久久爱影视i| 亚洲精品福利在线观看 | 国产精品中文字幕在线观看 | 91视频免费观看高清观看完整 | 亚洲综合伊人 | 亚洲成人在线播放视频 | 国产经典自拍 | 婷婷第四色 | 伊人色综合久久天天网蜜月 | 亚洲小视频在线播放 | 奇米在线观看视频 | 999视频在线播放777 | 在线欧美视频 | 日韩 亚洲 欧美 中文 高清 | 亚洲国产精品视频 | 日韩高清一区 | 9久热这里只有精品视频在线观看 | 成人欧美一级毛片免费观看 | 日本爱爱免费视频 | 国产精品亚洲综合 | 国产免费久久精品99 | 尹人久久| 久久成人亚洲 | 久久久中文字幕日本 | 鲁鲁狠色综合色综合网站 | 国产精品98视频全部国产 | 国产三级久久 | 亚洲欧美精品中字久久99 | 国产操穴| 欧美色穴|