99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python的內(nèi)建函數(shù)getattr()如何使用?

發(fā)布時間:2017-07-13 19:08  回復(fù):0  查看:2873   最后回復(fù):2017-07-13 19:08  
本文和大家分享的主要是python 內(nèi)建函數(shù)getattr()相關(guān)內(nèi)容,一起來看看吧,希望對大家 學(xué)習(xí)python 有所幫助。
   上述代碼查看傳送門
   記錄
  getattr python 里的一個內(nèi)建函數(shù) , 先看定義
  >>> help(getattr)
  Help  on built- in  function getattr  in  module __builtin__:
  getattr(...)
  getattr(object, name[,  default]) -> value
   Get a named attribute  from an object; getattr(x, 'y') is equivalent to x.y.
   When a  default argument  is given, it  is returned  when the attribute doesn't
  exist; without it, an exception  is raised  in that  case.
  >>>
  getattr() 的三個參數(shù):
  · object :  要實例化的對象
  · name  : 要執(zhí)行的命令操作
  · default : (可省略參數(shù))當(dāng)要執(zhí)行的命令操作不存在是,會返回這里傳入的 default
  getattr() 主要的作用是通過傳入字符串的方式,來動態(tài)的獲取方法的實例。這個函數(shù)最大的用處在于函數(shù)解耦,可以講一些可能會調(diào)用的方法,寫到一個配置文件中,在需要的時候動態(tài)加載。
  解釋的比較抽象,簡單來說:  getattr(object, name)  等價于  object.name
  下面通過代碼說明一下
   for i in range(t):
   c, * args =  map(str,input(). split())
  getattr(s, c) (*( int( xfor  x in  args))
  這段代碼實現(xiàn)了用戶從  stdin  輸入命令和參數(shù),命令賦值給了  c  ,參數(shù)傳給了一個指針變量 *args , 這里使用  *args  是為了接收不確定個數(shù)的參數(shù)。然后調(diào)用  getattr(s,c)  來執(zhí)行  c  這條指令(注:  s  是一串字符串),此處  getattr(s,c)  就可以等價于 s.c , 后面括號內(nèi)  (*(int(x) for x in args)) , 這里是一個生成器表達(dá)式,這部分稱為參數(shù)解包,它類似于如何定義具有任意數(shù)量(位置)參數(shù)的函數(shù)  —  *  在序列之前將遍歷序列并將其成員變?yōu)楹瘮?shù)調(diào)用參數(shù)。
  可以看出,這樣的用法比枚舉的思路方便了很多,也具有更高的擴(kuò)展性。
   延伸
  Python 中和 getattr 相關(guān)的還有  hasattr  、  setattr  、  delattr  ,通過舉例了解一下。
  # 定義一個類對象 class  Vimiix:
   def  __init__(self):
  self.name = 'vimiix'
   def  setName(self, name):
  self.name = name
   def  getName(self):
   return self.name
  # 實例化對象
  foo = Vimiix()
   hasattr(object, name) 判斷object是否具有name屬性
  >>>hasattr(foo,'getName')
  True
   setattr(object,name,default) 設(shè)置一個新的屬性,并賦予值.類似foo.age = 18
  >>>setattr(foo, 'age', '18')
   delattr(object, name) 刪除object對象的name屬性
  >>>delattr(foo, 'age')>>>getattr(foo, 'age', 'Not find')
  'Not find'
來源:Vimiix
您還未登錄,請先登錄

熱門帖子

最新帖子

?