愚公系列2021年12月 Python教學課程 21-面向對象編程-特殊成員和魔法方法

      網友投稿 623 2022-05-30

      一、特殊成員和魔法方法

      Python 中有大量類似__init__這種以雙下劃線開頭和結尾的特殊成員及“魔法方法”,

      它們有著非常重要的地位和作用,也是 Python 語言獨具特色的語法之一!

      比如:

      __init__ : 構造函數,在生成對象時調用 __del__ : 析構函數,釋放對象時使用 __repr__ : 打印,轉換 __setitem__ : 按照索引賦值 __getitem__: 按照索引獲取值 __len__: 獲得長度 __cmp__: 比較運算 __call__: 調用 __add__: 加運算 __sub__: 減運算 __mul__: 乘運算 __div__: 除運算 __mod__: 求余運算 __pow__: 冪

      需要注意的是,這些成員里面有些是方法,調用時要加括號,有些是屬性,調用時不需要加括號。下面介紹幾個常用的:

      1. __doc__

      說明性文檔和信息。Python 自建,無需自定義。

      class Foo: """ 描述類信息,可被自動收集 """ def func(self): pass # 打印類的說明文檔 print(Foo.__doc__)

      2. __init__()

      實例化方法,通過類創建實例時,自動觸發執行。

      class Foo: def __init__(self, name): self.name = name self.age = 18 obj = Foo('jack') # 自動執行類中的 __init__ 方法

      3. __module__ 和 __class__

      __module__ 表示當前操作的對象在屬于哪個模塊。

      __class__ 表示當前操作的對象屬于哪個類。

      這兩者也是 Python 內建,無需自定義。

      class Foo: pass obj = Foo() print(obj.__module__) print(obj.__class__) ------------ 運行結果: __main__

      4. __del__()

      析構方法,當對象在內存中被釋放時,自動觸發此方法。

      注:此方法一般無須自定義,因為 Python 自帶內存分配和釋放機制,除非你需要在釋放的時候指定做一些動作。析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。

      【愚公系列】2021年12月 Python教學課程 21-面向對象編程-特殊成員和魔法方法

      class Foo: def __del__(self): print("我被回收了!") obj = Foo() del obj

      5. __dict__

      列出類或對象中的所有成員!非常重要和有用的一個屬性,Python 自建,無需用戶自己定義。

      class Province: country = 'China' def __init__(self, name, count): self.name = name self.count = count def func(self, *args, **kwargs): print('func') # 獲取類的成員 print(Province.__dict__) # 獲取 對象 obj1 的成員 obj1 = Province('HeBei',10000) print(obj1.__dict__) # 獲取 對象 obj2 的成員 obj2 = Province('HeNan', 3888) print(obj2.__dict__)

      6. __str__()

      如果一個類中定義了__str__()方法,那么在打印對象時,默認輸出該方法的返回值。這也是一個非常重要的方法,需要用戶自己定義。

      下面的類,沒有定義__str__()方法,打印結果是:

      class Foo: pass obj = Foo() print(obj)

      定義了__str__()方法后,打印結果是:‘jack’。

      class Foo: def __str__(self): return 'jack' obj = Foo() print(obj)

      7、__len__()

      在 Python 中,如果你調用內置的 len()函數試圖獲取一個對象的長度,在后臺,其實是去調用該對象的__len__()方法,所以,下面的代碼是等價的:

      >>> len('ABC') 3 >>> 'ABC'.__len__() 3

      Python 的 list、dict、str 等內置數據類型都實現了該方法,但是你自定義的類要實現len 方法需要好好設計。

      Python 的特殊成員和“魔法方法”還有很多,需要大家在平時使用和學習的過程中不斷積累和總結使用經驗。

      5G教育 Python 面向對象編程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:模板引擎的原理
      下一篇:為什么S/4HANA的銷售訂單創建會觸發生產訂單的創建
      相關文章
      久久精品国产亚洲av高清漫画| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲精品无码专区| 中文字幕在线观看亚洲| 亚洲精品福利视频| 九月丁香婷婷亚洲综合色| 亚洲情综合五月天| 亚洲人成伊人成综合网久久久| 黑人大战亚洲人精品一区| 亚洲视频一区二区| 国产精品亚洲高清一区二区| 亚洲国产精品尤物yw在线| 亚洲av无码专区在线观看素人| 国产精品亚洲综合天堂夜夜| jzzijzzij在线观看亚洲熟妇| 高清在线亚洲精品国产二区| 亚洲国产成人久久综合野外| 亚洲成av人片一区二区三区| 亚洲欧洲国产成人综合在线观看 | 风间由美在线亚洲一区| 亚洲av综合日韩| 最新亚洲人成无码网站| 亚洲国产精品成人| 久久亚洲精品无码观看不卡| 亚洲人成人一区二区三区| 亚洲国产精品乱码一区二区| 久久夜色精品国产亚洲AV动态图| 亚洲电影中文字幕| 911精品国产亚洲日本美国韩国| 亚洲综合综合在线| 亚洲成a人片在线观看中文app| 亚洲成a人片在线观看中文app| 国产色在线|亚洲| 九九精品国产亚洲AV日韩| 亚洲第一福利网站在线观看| 亚洲中文字幕无码一区| 亚洲AV成人片色在线观看 | 国产成人 亚洲欧洲| 精品国产亚洲一区二区在线观看 | 亚洲一区欧洲一区| 九九精品国产亚洲AV日韩|