国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

在Python中通過getattr獲取對(duì)象引用的方法

2020-02-16 00:47:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

getattr函數(shù)

(1)使用 getattr 函數(shù),可以得到一個(gè)直到運(yùn)行時(shí)才知道名稱的函數(shù)的引用。

>>> li = ["Larry", "Curly"]>>> li.pop<built-in method pop of list object at 0x7fb75c255518>// 該語(yǔ)句獲取列表的 pop 方法的引用,注意該語(yǔ)句并不是調(diào)用 pop 方法,調(diào)用 pop 方法的應(yīng)該是 li.pop(), 這里指的是方法對(duì)象本身。>>> getattr(li, "pop")<built-in method pop of list object at 0x7fb75c2556c8>// 該語(yǔ)句也是返回 pop 方法的引用,但是此時(shí),方法名稱是作為一個(gè)字符串參數(shù)傳遞給 getattr 函數(shù)的, getattr 是一個(gè)有用到令人無(wú)法致信的內(nèi)置函數(shù),可以返回任何對(duì)象的任何屬性。在這個(gè)例子中,對(duì)象是一個(gè) list, 屬性是 pop 方法。>>> getattr(li, "append")("Moe")>>> li['Larry', 'Curly', 'Moe']// 如果不確信它是多么的有用,試試這個(gè): getattr 的返回值是 方法, 然后你就可以調(diào)用它,就像直接使用 li.append("Moe") 一樣, 但是實(shí)際上你沒有直接調(diào)用函數(shù), 只是以字符串形式指定了函數(shù)名稱。>>> getattr({}, "clear")<built-in method clear of dict object at 0x7fb75c273b40>// getattr 也可以作用于字典。>>> getattr((), "pop")Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'tuple' object has no attribute 'pop'// 理論上, getattr 可以作用于元組,但是由于元組沒有方法,所以不管你指定什么屬性名稱 getattr 都會(huì)引發(fā)一個(gè)異常。

(2)用于模塊的 getattr : getattr不僅僅適用于內(nèi)置數(shù)據(jù)類型,也可作用于模塊。

// odbchelper.pydef buildConnectionString(params):  """Build a connection string from a dictionary of parameters.   Returns string."""  return ";".join(["%s=%s" % (k, v) for k, v in params.items()])if __name__ == "__main__":  myParams = {"server":"mpilgrim",/        "database":"master",/        "uid":"sa",/        "pwd":"secret"        }  print buildConnectionString(myParams)// end>>> import odbchelper>>> odbchelper.buildConnectionString<function buildConnectionString at 0x7fb75c26e848>// 該語(yǔ)句返回 odbchelper 模塊中 buildConnectionString 函數(shù)的引用>>> getattr(odbchelper, "buildConnectionString")<function buildConnectionString at 0x7fb75c26e848>// 使用 getattr, 你能夠獲得同一函數(shù)的同一引用, 通常, getattr(object," attribute ")等價(jià)于 object.attribute, 如果 object 是一個(gè)模塊的話,那么 attribute 可能是定義在模塊中的任何東西:函數(shù)、類或者全局變量。>>> object = odbchelper>>> method = "buildConnectionString">>> getattr(object, method)<function buildConnectionString at 0x7fb75c26e848>// object 作為一個(gè)參數(shù)傳遞給函數(shù), method 是方法或者函數(shù)的名稱字符串。>>> type(getattr(object, method))<type 'function'>>>> import types>>> type(getattr(object, method)) == types.FunctionTypeTrue// method 是函數(shù)的名稱,通過獲取 type 可以進(jìn)行驗(yàn)證。>>> callable(getattr(object, method))True// 由于 method 是一個(gè)函數(shù), 所以它是可調(diào)用的。            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄底市| 松原市| 辉南县| 怀安县| 蒙自县| 洮南市| 江津市| 八宿县| 方正县| 武功县| 北宁市| 隆安县| 美姑县| 潮州市| 饶平县| 白山市| 松潘县| 安陆市| 东丽区| 云阳县| 永清县| 大田县| 克什克腾旗| 龙口市| 长子县| 枣庄市| 古浪县| 静乐县| 临沂市| 桓台县| 高邮市| 康保县| 平武县| 周宁县| 密云县| 天峨县| 车致| 航空| 化州市| 尼勒克县| 乃东县|