文章目錄
- 魔法方法
- 1. `__init__` 方法
- 2. `__del__` 方法
- 3. `__str__` 方法
- 4. `__repr__` 方法
- 5. `__call__` 方法
- 進階案例
魔法方法
Python 里有一種方法,叫做魔法方法。Python 的類里提供的,兩個下劃線開始,兩個下劃線結束的方法,就是魔法方法,魔法方法在恰當的時候就會被激活,自動執行。
魔法方法的兩個特點:
- 兩側各有兩個下劃線;
- "咒語"名字已經由 Python 官方定義好,我們不能亂寫。
1. __init__
方法
__init__()
方法,在創建一個對象時默認被調用,不需要手動調用。在開發中,如果希望在創建對象的同時,就設置對象的屬性,可以對 __init__
方法進行改造。
class Cat:
"""這是一個貓類"""def __init__(self,name): # 重寫了 `__init__` 魔法方法self.name = namedef eat(self):return "%s愛吃魚"%self.namedef drink(self):return '%s愛喝水'%self.name"""
tom = Cat()
TypeError: __init__() missing 1 required positional argument: 'name'
這種寫法在運行時會直接報錯!因為 `__init__` 方法里要求在創建對象時,必須要傳遞 name 屬性,如果不傳入會直接報錯!
"""tom = Cat("Tom") # 創建對象時,必須要指定 name 屬性的值
tom.eat() # tom愛吃魚
注意:
__init__()
方法在創建對象時,會默認被調用,不需要手動的調用這個方法。__init__()
方法里的self
參數,在創建對象時不需要傳遞參數,python 解釋器會把創建好的對象引用直接賦值給self
。- 在類的內部,可以使用
self
來使用屬性和調用方法;在類的外部,需要使用對象名來使用屬性和調用方法。 - 如果有多個對象,每個對象的屬性是各自保存的,都有各自獨立的地址。
- 方法是所有對象共享的,只占用一份內存空間,方法被調用時會通過
self
來判斷是哪個對象調用了實例方法。
2. __del__
方法
創建對象后,Python 解釋器默認調用 __init__()
方法;而當刪除對象時,Python 解釋器也會默認調用一個方法,這個方法為 __del__()
方法。
class Student:def __init__(self,name,score):print('__init__方法被調用了')self.name = nameself.score = scoredef __del__(self):print('__del__方法被調用了')s = Student('lisi',95)
del s
input('請輸入內容')
3. __str__
方法
__str__
方法返回對象的描述信息,使用 print()
函數打印對象時,其實調用的就是這個對象的 __str__
方法。
class Cat:def __init__(self,name,color):self.name = nameself.color = colortom = Cat('Tom','white')# 使用 print 方法打印對象時,會調用對象的 __str__ 方法,默認會打印類名和對象的地址名
print(tom) # `<__main__.Cat object at 0x0000021BE3B9C940>`
如果想要修改對象的輸出結果,可以重寫 __str__
方法。
class Person:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return '哈哈'p = Person('張三',18)
print(p) # 哈哈 打印對象時,會自動調用對象的 `__str__` 方法
一般情況下,我們在打印一個對象時,可能需要列出這個對象的所有屬性。
class Student:def __init__(self,name,score):self.name = nameself.score = scoredef __str__(self):return '姓名是:{},成績是{}分'.format(self.name,self.score)s = Student('lisi',95)
print(s) # 姓名是:lisi,成績是95分
4. __repr__
方法
__repr__
方法和 __str__
方法功能類似,都是用來修改一個對象的默認打印內容。在打印一個對象時,如果沒有重寫 __str__
方法,它會自動來查找 __repr__
方法。如果這兩個方法都沒有,會直接打印這個對象的內存地址。
class Student:def __init__(self, name, score):self.name = nameself.score = scoredef __repr__(self):return 'helllo'class Person:def __repr__(self):return 'hi'def __str__(self):return 'good's = Student('lisi', 95)
print(s) # hellop = Person()
print(p) # good
5. __call__
方法
對象后面加括號,觸發執行。
class Foo:def __init__(self):passdef __call__(self, *args, **kwargs):print('__call__')obj = Foo() # 執行 `__init__`
obj() # 執行 `__call__`
總結:
- 當創建一個對象時,會自動調用
__init__
方法,當刪除一個對象時,會自動調用__del__
方法。 - 使用
__str__
和__repr__
方法,都會修改一個對象轉換成為字符串的結果。一般來說,__str__
方法的結果更加在意可讀性,而__repr__
方法的結果更加在意正確性(例如: datetime 模塊里的 datetime 類)。
進階案例
【Python】Python 實現猜單詞游戲——挑戰你的智力和運氣!
【python】Python tkinter庫實現重量單位轉換器的GUI程序
【python】使用Selenium獲取(2023博客之星)的參賽文章
【python】使用Selenium和Chrome WebDriver來獲取 【騰訊云 Cloud Studio 實戰訓練營】中的文章信息
使用騰訊云 Cloud studio 實現調度百度AI實現文字識別
【玩轉Python系列【小白必看】Python多線程爬蟲:下載表情包網站的圖片
【玩轉Python系列】【小白必看】使用Python爬取雙色球歷史數據并可視化分析
【玩轉python系列】【小白必看】使用Python爬蟲技術獲取代理IP并保存到文件中
【小白必看】Python圖片合成示例之使用PIL庫實現多張圖片按行列合成
【小白必看】Python爬蟲實戰之批量下載女神圖片并保存到本地
【小白必看】Python詞云生成器詳細解析及代碼實現
【小白必看】Python爬取NBA球員數據示例
【小白必看】使用Python爬取喜馬拉雅音頻并保存的示例代碼
【小白必看】使用Python批量下載英雄聯盟皮膚圖片的技術實現
【小白必看】Python爬蟲數據處理與可視化
【小白必看】輕松獲取王者榮耀英雄皮膚圖片的Python爬蟲程序
【小白必看】利用Python生成個性化名單Word文檔
【小白必看】Python爬蟲實戰:獲取陰陽師網站圖片并自動保存
小白必看系列之圖書管理系統-登錄和注冊功能示例代碼
小白實戰100案例: 完整簡單的雙色球彩票中獎判斷程序,適合小白入門
使用 geopandas 和 shapely(.shp) 進行地理空間數據處理和可視化
使用selenium爬取貓眼電影榜單數據
圖像增強算法Retinex原理與實現詳解
爬蟲入門指南(8): 編寫天氣數據爬蟲程序,實現可視化分析
爬蟲入門指南(7):使用Selenium和BeautifulSoup爬取豆瓣電影Top250實例講解【爬蟲小白必看】
爬蟲入門指南(6):反爬蟲與高級技巧:IP代理、User-Agent偽裝、Cookie繞過登錄驗證及驗證碼識別工具
爬蟲入門指南(5): 分布式爬蟲與并發控制 【提高爬取效率與請求合理性控制的實現方法】
爬蟲入門指南(4): 使用Selenium和API爬取動態網頁的最佳方法
爬蟲入門指南(3):Python網絡請求及常見反爬蟲策略應對方法
爬蟲入門指南(2):如何使用正則表達式進行數據提取和處理
爬蟲入門指南(1):學習爬蟲的基礎知識和技巧
深度學習模型在圖像識別中的應用:CIFAR-10數據集實踐與準確率分析
Python面向對象編程基礎知識和示例代碼
MySQL 數據庫操作指南:學習如何使用 Python 進行增刪改查操作
Python文件操作指南:編碼、讀取、寫入和異常處理
使用Python和Selenium自動化爬取 #【端午特別征文】 探索技術極致,未來因你出“粽” # 的投稿文章
Python多線程與多進程教程:全面解析、代碼案例與優化技巧
Selenium自動化工具集 - 完整指南和使用教程
Python網絡爬蟲基礎進階到實戰教程
Python入門教程:掌握for循環、while循環、字符串操作、文件讀寫與異常處理等基礎知識
Pandas數據處理與分析教程:從基礎到實戰
Python 中常用的數據類型及相關操作詳解
【2023年最新】提高分類模型指標的六大方案詳解
Python編程入門基礎及高級技能、Web開發、數據分析和機器學習與人工智能
用4種回歸方法繪制預測結果圖表:向量回歸、隨機森林回歸、線性回歸、K-最近鄰回歸