python中的一切事物都是對象,均可以使用反射!python面向對象中的反射是:經過字符串的形式操做任何對象相關的類、方法及屬性。python
反射對象中的屬性和方法,有這幾個方法:函數
一、反射對象的屬性,getattr:學習
# 一、反射對象的屬性: class A: dic={ 'a':1, 'b':2, 'c':''} def __init__(self,name):self.name=name res=A('廣深小龍') r=getattr(res,'name') # 查看屬性:(實例化對象,屬性變量名) print(r)
二、反射對象的方法,getattr:spa
# 二、反射對象的方法: class A: dic={ 'a':1, 'b':2, 'c':''} @staticmethod def func(): return 'qasdasdasd' r1 = getattr(A,'func') print(r1) # 拿到的是func方法 print(r1()) # 能夠調用到函數
三、反射類的屬性,getattr:code
# 三、反射類的屬性: class A: dic = { 'a':'ff', 'b':'func'} print(getattr(A,'dic'))
四、反射類的方法,getattr:對象
# 四、反射類的方法: class A: dic = { 'a':'ff', 'b':'func'} @staticmethod def ff():return '調用了ff方法' @classmethod def func(cls):return '調用了func方法' def hub(self):return '調用了hub方法' print(getattr(A,'ff')()) print(getattr(A(),'hub')()) # 注意:A()是由於hub是普通類的方法須要傳self if hasattr(A(),'hub'): # hasattr 判斷是否存在,返回bool print(getattr(A,'func')())
五、反射模塊的屬性與方法,getattr:
內置函數、本身定義的函數均可以使用blog
# 五、反射模塊的屬性與方法 # 內置函數、本身定義的函數均可以使用 import test getattr(test,'r') # 反射模塊的屬性 func=getattr(test,'func') # 反射模塊的方法 print(func())
六、反射本身模塊中的變量與方法,getattr:字符串
# 六、反射本身模塊中的變量與方法 name = '廣深小龍' def func(): return 'func函數' import sys print(getattr(sys.modules['__main__'],'name')) # 反射本身模塊的變量 print(getattr(sys.modules['__main__'],'func')()) # 反射本身模塊的函數
可能給其餘模塊調用就將'__main__'改成變量:__name__get
# 可能給其餘模塊調用就將'__main__'改成變量:__name__ import sys def name():return '小龍女' ret=print(getattr(sys.modules[__name__],'name')())# 反射本身模塊的函數
七、反射帶參數、反射模塊的類函數,getattr,hasattr:it
# 七、反射帶參數、反射模塊的類函數 class A: @staticmethod def func(name,age):return name+age print(getattr(A,'func')('廣深小龍','23')) # 反射帶參數 import test if hasattr(test,'A'): # 判斷是否反射到其餘模塊類:A,返回bool res = getattr(test,'A')() # 反射其餘模塊的類:A print(res.f()) else:print('沒有反射到對象!')
八、新增靜態屬性:setattr; 刪除靜態屬性:delattr
# 八、新增靜態屬性:setattr class A:pass a = A() setattr(a,'name','廣深小龍') setattr(A,'name','小龍') print(a.name) print(A.name) # delattr 刪除靜態屬性 delattr(a,'name') # 刪除實例化的a print(a.name) # 找的是類的name,由於原來的 廣深小龍 被刪除了
歡迎來你們QQ交流羣一塊兒學習:482713805 !!!