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

Python學習之反射和類的特殊成員方法詳解

發(fā)布時間:2017-09-18 15:29  回復:0  查看:2708   最后回復:2017-09-18 15:29  
本文和大家分享的主要是python 中有關 反射和類的特殊成員方法,一起來看看吧,希望對大家 學習python有所幫助。
   反射
  反射即想到4 個內置函數分別為 :getattr 、 hasattr 、 setattr 、 delattr   獲取成員、檢查成員、設置成員、刪除成員
   class  Dog(object):
   def  __init__(self,name):
  self.name = name
   def  eat(self):
  print("%s is eating..."%self.name)
   def  run():
  print("runing ....")
  d = Dog("lucy")
  choise=input(" 請輸入要調用的方法: ") if hasattr(d,choise):# 判斷一個對象是否有對應的字符串方法
  func=getattr(d,choise)# 根據字符串去獲取對象里相應的方法或屬性的內存地址對象
  func() else:
  setattr(d,choise,run)#setattr obj , y fun )相當于 obj.y=fun , fun 可以是屬性或者方法
  v=getattr(d,choise)
  print(v)
  dir([obj]):
  調用這個方法將返回包含obj 大多數屬性名的列表(會有一些特殊的屬性不包含在內)。 obj 的默認值是當前的模塊對象。
  hasattr(obj, attr):
  這個方法用于檢查obj 是否有一個名為 attr 的值的屬性,返回一個布爾值。
  getattr(obj, attr):
  調用這個方法將返回obj 中名為 attr 值的屬性的值,例如如果 attr 'bar' ,則返回 obj.bar
   setattr(obj, attr, val):
  調用這個方法將給obj 的名為 attr 的值的屬性賦值為 val 。例如如果 attr 'bar' ,則相當于 obj.bar = val 。
  __doc__  查看尖的描述信息
  __module__ 表示當前操作的對象所在的模塊
  __class__ 表示當前操作的對象所屬的類
  __init__ 構造方法 通過類創(chuàng)建對象自動執(zhí)行
  __del__ 析構方法 , 當前對象在內存中被釋放自動斬妖執(zhí)行
  __call__ 對象后面加括號觸發(fā)執(zhí)行
  __dict__ 查看類或對象中的成員
  __str__ 如果一個類中定義了此方法 , 那么打印此類對象時 , 輸出此方法的返回值
  __getitem__ 當類中定義了一個字典的屬性成員 , 可以獲取
  __setitem__ 設置修改類中字典的數據
  __delitem__ 刪除 類中字典的數據
  __metalass__ 其用來表示該類由 誰 來實例化創(chuàng)建
  __new__ 觸發(fā)  __init__ 創(chuàng)建實例
   from lib.ss  import a# 示例類  dog class  doges(object):
  """ 類的描述信息 """
   def  __init__(self,name,food):
  self.name=name
  self.food=food
  self.data={}# 定義一個類的字典
   def  __call__(self, *args, **kwargs):# 對象后面加括號解執(zhí)行
  print(*args)
   def  __str__(self):# 默認輸出返回值
   return self.name
   def  __getitem__(self):# 可以獲取類的的字典
   return self.data
   def  __setitem__(self, key, value):# 可以設置類的的字典
  self.data[key]=value
   def  __delitem__(self, key):# 可以刪除類的字典的內容
   del self.data[key]
  dog=doges('xxx','iii')
  print(dog.__doc__)
  b=a()
  print(b.__module__)# 操作的對象的那個模塊
  print(dog.__class__)# 當前操作的對象的類是什么
  dog('111')#
  print(doges.__dict__)# 查看類或對象的成員  類只打印類的成員不打印對象的成員
  print(dog.__dict__)# 查看類或對象的成員 對象只打印對象的成員不打印類的成員
  print(dog)# 打印  __str__ 的返回值
  print(dog.__str__())# 打印返回值
  dog['1']=1000# 觸發(fā) .__setitem__()
  dog['2']=1000# 觸發(fā) .__setitem__()
  print(dog.__getitem__())
  print(dog.__delitem__('1'))# 刪除類中字典
  print(dog.__getitem__())
  # 設置類的特殊方法 def  func(self):
  print('hello word%s'%self.name)
  print()
   def  __init__(self,name,age):
  self.name=name
  self.age=age##type 參數  1: 類名  2. 類的基類  3. 類的成員 , 字典格式
  CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
  cat=CAT(' 喵喵 ',3)
  cat.func()
  print(cat.name,cat.age)
來源: 博客園

您還未登錄,請先登錄

熱門帖子

最新帖子

?