【從零學習python 】40.python魔法方法(一)

文章目錄

  • 魔法方法
    • 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-最近鄰回歸

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41711.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何切換goland之中的版本號(升級go 到1.20)

go 安裝/版本切換_go 切換版本_云滿筆記的博客-CSDN博客 用brew就行&#xff1a; echo export PATH"/opt/homebrew/opt/go1.20/bin:$PATH" >> ~/.zshrc

[國產MCU]-BL602開發實例-OLED-SSD1306驅動與U8g2移植

OLED-SSD1306驅動與U8g2移植 文章目錄 OLED-SSD1306驅動與U8g2移植1、OLED介紹2、SSD1306介紹2、U8g2介紹3、U8g2移植3.1 定義U8g2圖形庫的移植函數3.2 移植函數實現3.3 移植函數調用4、驅動測試本文將詳細介紹如何在BL602中移植U8g2圖形庫,并通過U8g2庫驅動OLED SSD1306顯示屏…

Linux6.40 Kubernetes 配置資源管理

文章目錄 計算機系統5G云計算第三章 LINUX Kubernetes 配置資源管理一、Secret1.Secret 四種類型1&#xff09;kubernetes.io/service-account-token2&#xff09;Opaque3&#xff09;kubernetes.io/dockerconfigjson4&#xff09;kubernetes.io/tls 2.Pod 需要先引用才能使用某…

React入門 jsx學習筆記

一、JSX介紹 概念&#xff1a;JSX是 JavaScript XML&#xff08;HTML&#xff09;的縮寫&#xff0c;表示在 JS 代碼中書寫 HTML 結構 作用&#xff1a;在React中創建HTML結構&#xff08;頁面UI結構&#xff09; 優勢&#xff1a; 采用類似于HTML的語法&#xff0c;降低學…

因果推斷(四)斷點回歸(RD)

因果推斷&#xff08;四&#xff09;斷點回歸&#xff08;RD&#xff09; 在傳統的因果推斷方法中&#xff0c;有一種方法可以控制觀察到的混雜因素和未觀察到的混雜因素&#xff0c;這就是斷點回歸&#xff0c;因為它只需要觀察干預兩側的數據&#xff0c;是否存在明顯的斷點…

【C++入門到精通】C++入門 —— list (STL)

閱讀導航 前言一、list簡介1.概念2.特點 二、list的使用1.list的構造2.常見的操作?std::list類型的增、刪、查、改 三、list與vector的對比溫馨提示 前言 文章綁定了VS平臺下std::list的源碼&#xff0c;大家可以下載了解一下&#x1f60d; 前面我們講了C語言的基礎知識&…

C語言實例_獲取文件MD5值

一、MD5介紹 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一種常用的哈希函數算法。將任意長度的數據作為輸入&#xff0c;并生成一個唯一的、固定長度&#xff08;通常是128位&#xff09;的哈希值&#xff0c;稱為MD5值。MD5算法以其高度可靠性和廣泛應用而聞名…

全球磁強計市場價值約為16.2億美元,預測期內將以超過5.21%的增長率增長

磁強計是一種用于測量磁場強度和方向的儀器。它可以檢測和測量地球磁場、物體的磁性、地下礦藏、磁性材料等。磁強計在地球科學、物理學、地質學、勘探、礦業等領域具有廣泛的應用。 根據阿譜爾&#xff08;APO&#xff09;的統計及預測&#xff0c;2022年全球磁強計市場價值約…

跳跳!(c++題解)

題目描述 你是一只小跳蛙&#xff0c;你特別擅長在各種地方跳來跳去。 這一天&#xff0c;你和朋友小 F 一起出去玩耍的時候&#xff0c;遇到了一堆高矮不同的石頭&#xff0c;其中第 ii 塊的石頭高度為 hi?&#xff0c;地面的高度是 h0?0。你估計著&#xff0c;從第 ii 塊…

ts與vue

ts與Vue 如果你已經學習了typeScript,但不知道如何在vue項目中使用&#xff0c;那么這篇文章將會很適合你。參考千峰教育 kerwin視頻 1.會自動推導&#xff0c;隱士推導。提示 類型系統。 獨立模塊。 isolatedModules選項&#xff1a;是否配置為獨立的模塊。 減少報錯 let …

dispatcherServlet在tomcat啟動時如何被加載(1)

目錄 在springboot工程中, 如何添加一個servlet呢? 方法1 : 使用WebServlet注解 方法2 : 使用ServletRegistrationBean進行注冊 springmvc 采用的就是方式2和springboot集成的, 看一下源碼 springboot 字段裝配里面有這個類, 看一下源碼 90行, 創建了一個DispatcherServlet對象…

深入探究Socks5代理與IP代理在網絡安全與爬蟲中的應用

1. Socks5代理&#xff1a;打開網絡隧道的多功能工具 Socks5代理是一種流行的代理協議&#xff0c;它在傳輸層為數據包提供了隧道。相較于之前的版本&#xff0c;Socks5不僅支持TCP連接&#xff0c;還可以處理UDP流量&#xff0c;使其在需要實時數據傳輸的應用中表現出色。在網…

Zabbix配置通用的TCP/IP:port監控項

我們經常的用接口&#xff0c;比如說FTP、HTTP、DNS、數據庫接口&#xff0c;都可以用IP:PORT方式探測其是否存活&#xff0c;那么我們去繁就簡&#xff0c;就簡單監控一下IP&#xff1a;PORT吧&#xff01; 1、新建主機&#xff1a; 填入主機名稱、群組、Agent就是127.0.0.1…

解決Adobe Flash Player已被屏蔽

問題&#xff1a;該插件不支持 原因&#xff1a;現在瀏覽器默認禁用flash 博主當前使用的是谷歌瀏覽器Chrome 2個主要方法都已經失效 搜索一圈后&#xff0c;之前博客給出的2個主要方法都已經失效。 1、flash.cn 下載本地播放器 2、在chrome中打開flash的禁用開關 2023年解…

LangChain源碼逐行解密之系統(二)

LangChain源碼逐行解密之系統 20.2 serapi.py源碼逐行剖析 我們可以看一下Google查詢的例子,在LangChain中有多種實現的方式。 如圖20-5所示,在utilities的serpapi.py代碼文件中實現了SerpAPIWrapper。 圖20- 5 utilities的serpapi.py的SerpAPIWrapper 在langchain目錄的se…

@pyrallis.wrap()

pyrallis.wrap import pyrallis pyrallis.wrap() 這個pyrallis.wrap()是什么 pyrallis.wrap() 是一個 Python 裝飾器&#xff08;Decorator&#xff09;&#xff0c;用于將函數或方法包裝在 Pyrallis 框架提供的性能分析器中。裝飾器是 Python 中的一種特殊語法&#xff0c;允許…

如何避免爬蟲IP被屏蔽

各位爬友們好&#xff0c;作為一名專業的爬蟲代理提供者&#xff0c;我要和大家分享一些避免爬蟲IP被屏蔽的實用技巧。你知道嗎&#xff0c;當我們爬取數據的時候&#xff0c;很容易被目標網站識別出來并封禁我們的IP地址&#xff0c;導致無法繼續爬取數據。這個問題困擾了很多…

7. 實現 API 自動生成

目錄 1. pom.xml中引用依賴 2. 引入相關的依賴 3. 編寫配置類 4. application.yml 中添加配置 5. API 常用注解 6. 訪問 API 列表 7. API 導入 Postman 使用 Springfox Swagger生成 API&#xff0c;并導入 Postman&#xff0c;完成API單元測試。 Swagger 簡介&#xff1a;Swag…

執行Lua腳本后一直查詢不到Redis中的數據(附帶問題詳細排查過程,一波三折)

文章目錄 執行Lua腳本后一直查詢不到Redis中的數據&#xff08;附帶詳細問題排查過程&#xff0c;一波三折&#xff09;問題背景問題1&#xff1a;Lua腳本無法切庫問題2&#xff1a;RedisTemlate切庫報錯問題3&#xff1a;序列化導致數據不一致問題4&#xff1a;Lua腳本中單引號…

Etcd備份及恢復

一、Etcd數據備份 1、備份命令 [rootlocalhost ~]# export ETCDCTL_API3 [rootlocalhost ~]# /data/etcd-3.4.9/bin/etcdctl --endpoints10.2.20.108:2379 snapshot save etcd-date "%Y-%m-%d_%H-%M-%S".snapshot 2、備份完成后會在當前目錄生成備份文件 [rootlo…