日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 面向对象之:反射,双下方法

發布時間:2024/8/26 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 面向对象之:反射,双下方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。