python 面向对象之:反射,双下方法
生活随笔
收集整理的這篇文章主要介紹了
python 面向对象之:反射,双下方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數vs 方法
# 1 通過函數名可以大致判斷 # print(func) # <function func at 0x00000000005D1EA0> 函數 # obj = A() # print(obj.func) # <bound method A.func of <__main__.A object at 0x0000000001DE1CF8>> 方法# 2. 通過types模塊去驗證 # from types import FunctionType #返回bool True就是函數 from types import MethodType # 類名調用func 就是一個函數 # print(isinstance(A.func, FunctionType)) #True 函數 # 對象調用func 就是一個方法 # print(isinstance(obj.func, FunctionType)) # 對于靜態方法的研究 # print(isinstance(A.f, FunctionType))# 結論 # 1. 類?法.不論任何情況,都是?法. # 2. 靜態方法,不論任何情況.都是函數 # 3. 實例方法,如果是實例訪問.就是?法.如果是類名訪問就是函數. # 函數與方法 # 函數: 全都是顯性傳參 # 方法: 存在隱性傳參反射
1.什么是反射?以及應?場景?(2分) 通過字符串的形式操作對象相關的屬性。python中的?切事物都是對象(都可以使?反射) # python面向對象中的反射:通過字符串的形式操作對象相關的屬性。python中的一切事物都是對象(都可以使用反射) # 從實例的角度去研究反射 可以使用 # getattr(obj,'func')() # 從類的角度研究反射 可以使用 # getattr(A,'func')(obj) # 從當前腳本研究反射 可以使用 # hasattr(this_module, 's1') # 在其他模塊研究反射 可以使用 # getattr(obj,'test')()# 總結 # print(hasattr(obj,'name'))#查詢 返bool 確認 有沒有這個屬性 # print(getattr(obj,'name','沒有'))#查詢 返回 對應屬性值 加第3個參數 不會報錯 # setattr(obj,'aa','aa')#增加屬性 可以覆蓋 # delattr(obj,'name')#刪除屬性雙下方法
# 總結 # 一個對象之所以可以使用len()函數,根本原因是這個對象從輸入的類中有__len__方法, # hash(obj) 會調用obj這個對象的類(基類)的__hash__方法 # print(str(obj)) # 會觸發__str__ # print(obj) # 打印輸出實例會觸發__str__ # # print('此對象為%s' %obj) # 格式化輸出會觸發__str__ # # print(obj) # 觸發__repr__ # print('此對象是%r' %obj) # 觸發__repr__ # # print(obj) 先觸發__str__方法 # __call__ 方法的執行是由對象后加括號觸發的,而構造方法的執行是由創建對象觸發的 # print(a == b) # 對一個類的兩個對象進行比較操作,就會觸發__eq__方法 # __new__ 構造方法 # __new__創造并返回一個新對象. # 類名() 先觸發__new__ 并且將類名自動傳給cls. # __item__對對象進行類似于字典的操作 # 對一個對象類似于進行with語句上下文管理的操作, 必須要在類中定義__enter__ __exit__ # 單列模式 # 這個類的對象不是個性化的,主要是實例化對象之后去執行類中的方法. # class A: # __instance = None # # def __new__(cls, *args, **kwargs): # if not cls.__instance: # object1 = object.__new__(cls) # cls.__instance = object1 # return cls.__instance # obj = A() # obj1 = A() # obj2 = A() # print(obj,obj1,obj2)轉載于:https://www.cnblogs.com/saoqiang/p/11377193.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python 面向对象之:反射,双下方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [考试反思]0819NOIP模拟测试26
- 下一篇: SQL用户存在则更新不存在则插入