魔法方法介紹

【一】什么是魔法方法

  • 在類內部達到指定條件會自動觸發的方法

【二】魔法方法

# 【1】__init__ : 實例化類得到對象的時候會自動觸發
class Student(object):def __init__(self):print(f"實例化類的時候觸發")     # 實例化類的時候觸發
?
s = Student()
?
# 【2】__del__ : 當對象/對象關閉銷毀的時候自動觸發
# 場景:打開文件 open --> close
?class Student(object):def __init__(self):print(f"實例化類的時候觸發")     # 實例化類的時候觸發
?def __del__(self):print(f"當前在銷毀的時候觸發")    # 當前在銷毀的時候觸發
s = Student()
?
# 【3】__str__ : 在打印當前對象的時候可以定制打印當前對象的顯示內容
# 必須且只能返回字符串類型的數據def __str__(self):print(f"打印當前對象的時候觸發")return self.name# 【4】__repr__ : 交互解釋器會觸發def __repr__(self):print(f"與解釋器交互的時候會觸發")print('-------')return self.name# 【5】__doc__ : 打印類里面的注釋內容的時候會觸發# 對象.__doc__# 類.__doc____doc__ = "這是一個學生類"# 【6】__enter__  : 打開文檔的時候會觸發 with 語句觸發def __enter__(self):print(f"打開文檔的時候會觸發")print('-------')return self
?
# 【7】__exit__ : 關閉文檔的時候會觸發 with 語句觸發def __exit__(self, exc_type, exc_val, exc_tb):print(f"關閉文檔的時候會觸發")print('-------')...# 【8】__getattr__ : 獲取當前對象的不存在的屬性的時候觸發# __getattribute__ : 值不存在的時候會觸發異常def __getattr__(self, item):print(f'當前對象屬性不存在的時候會觸發')print(item) ?# 就是不存在的屬性的變量名# 父類里面有一個 __getattribute__ 能主動拋出值不存在的異常super().__getattribute__(item) # 【9】__setattr__ : 設置對象的屬性值的時候會觸發(包括 __init__ 初始化屬性)def __setattr__(self, key, value):print(f'設置當前對象屬性的時候會觸發 對象.key=value')print(f"key :>>>>> {key}")print(f"value :>>>>> {value}")
# 【10】__setattr__ : 刪除對象的屬性值的時候會觸發def __delattr__(self, item):print(f'當前在刪除屬性的時候會觸發')print(item)print('-------')# 【11】__setitem__ : 對象[key]=value 設置值的時候會觸發def __setitem__(self, key, value):print(f'設置屬性的時候會觸發 設置方式為 對象[key]=value')print(key, value)print('-------')# 用自己的名稱空間字典放self.__dict__[key] = value# 【12】__getitem__ : 獲取屬性的時候會觸發 設置方式為 對象[key]def __getitem__(self, item):print(f'獲取屬性的時候會觸發 設置方式為 對象[key]')print('-------')return self.__dict__[item]
# 【13】__delitem__ : 刪除屬性的時候會觸發 刪除方式為 del 對象[key]def __delitem__(self, key):print(f'刪除屬性的時候會觸發 刪除方式為 del 對象[key]')print(key)print('-------') ? ?
# 【14】__getattribute__: 負責正常對象。屬性不存在的時候的報錯方法def __getattribute__(self,item):# s = Student(name='dream')
# print(s)  # <__main__.Student object at 0x0000023FE2084E50>
# print(repr(s))  # 觸發 __repr__
# print(s.__doc__)
# print(Student.__doc__)
?
# with Student('hope') as fp:
# ? ? print(fp,type(fp))
?
# s = Student(name='dream')
# print(s.name)
# print(s.age)
?
# s.age = 18
# del s.age
# print(s.age)
?
# s['gender'] = 'male'
# print(s['gender'])
#
# del s['gender'] ? ? ? ? ? 
# 【15】 __call__ :觸發條件是當前類()或對象()調用的時候
?
class Student:def __init__(self):print(f'__init__被觸發')
?def __call__(self, *args, **kwargs):print(f"__call__被觸發")
?
?
# __call__ 可以放在兩個位置
# 一個位置在當前對象的父類中 直接對象()會觸發當前類的__call__
# 另一個位置在當前對象的父類的元類在會觸發
s = Student()
s()
?
?
# callable:校驗當前對象是否可被調用()
# 類本身可以可以被任意調用的
print(callable(Student)) ? ?# True
# 但是對象不可以直接被調用
# 想讓對象也能()調用,就必須重寫__call__
print(callable(s)) ? ? ?# True  如果將上面的__call__刪掉 則s()就無法調用變為False

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

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

相關文章

在云服務器上運行StyleGAN3生成偽樣本

首先是傳入數據&#xff0c;這里我們不做贅述。 對于數據格式的裁剪&#xff0c;可以通過以下代碼進行&#xff1a; from glob import glob from PIL import Image import os from tqdm import tqdm from tqdm.std import trangeimg_path glob(r"C:\Users\Administrato…

【Oracle篇】rman物理備份工具的基礎理論概述(第一篇,總共八篇)

??博主介紹??&#xff1a; ?又是一天沒白過&#xff0c;我是奈斯&#xff0c;DBA一名? ???擅長Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式數據倉庫)、Linux&#xff0c;也在擴展大數據方向的知識面??? ??????大佬們都喜歡靜靜的看文章&am…

嵌入式是大坑的說法,是否與學生的信息不對稱有關?

在開始前我有一些資料&#xff0c;是我根據網友給的問題精心整理了一份「嵌入式的資料從專業入門到高級教程」&#xff0c; 點個關注在評論區回復“888”之后私信回復“888”&#xff0c;全部無償共享給大家&#xff01;&#xff01;&#xff01; 目前也算是在搞嵌入式&#…

【深度學習】時空圖卷積網絡(STGCN),預測交通流量

論文地址&#xff1a;https://arxiv.org/abs/1709.04875 Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 文章目錄 一、摘要二、數據集介紹美國洛杉磯交通數據集 METR-LA 介紹美國加利福尼亞交通數據集 PEMS-BAY 介紹美國…

Cocktail for Mac 激活版:一站式系統優化與管理神器

Cocktail for Mac是一款專為Mac用戶打造的系統優化與管理工具&#xff0c;憑借其強大的功能和簡便的操作&#xff0c;贏得了廣大用戶的喜愛。這款軟件集系統清理、修復和優化于一身&#xff0c;能夠幫助用戶輕松解決Mac系統中的各種問題&#xff0c;提高系統性能。 Cocktail fo…

Leetcode-有效的括號(帶圖)

20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/valid-parentheses/ 題目 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&…

在做題中學習(59):除自身以為數組的乘積

238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前綴積和后綴積 思路&#xff1a;answer中的每一個元素都是除自己以外所有元素的和。那就處理一個前綴積數組和后綴積數組。 而前綴積(f[i])是&#xff1a;[0,i-1]所有元素的乘積 后綴…

如何利用香港多IP服務器實現定制化的網絡服務

如何利用香港多IP服務器實現定制化的網絡服務 在當今數字化快速發展的時代&#xff0c;企業對于網絡服務的需求日益增加&#xff0c;尤其是對于定制化和高度可調整的網絡服務的需求。香港&#xff0c;作為國際金融中心和數據中心的樞紐&#xff0c;提供了優越的網絡基礎設施和…

什么是蜜罐,在當前網絡安全形勢下,蜜罐能提供哪些幫助

在當前的互聯網時代&#xff0c;網絡安全威脅日益嚴峻&#xff0c;攻擊手段層出不窮。為了應對這些威脅&#xff0c;網絡安全專家們不斷探索新的防御手段&#xff0c;在過去的幾年里&#xff0c;一種更加積極主動的網絡安全方法正在興起。蜜罐技術便是這樣一種備受矚目的主動防…

【教學類-55-05】20240516圖層順序挑戰(三格長條紙加黑色邊框、3*3、5張,不重復7186張,9坐標點顏色哈希值去重、保留5色)

背景需求&#xff1a; 前期測試了4*4框格種的8種顏色&#xff0c;隨機抽取7種&#xff0c;隨機排列圖層&#xff0c;去掉相同的圖片、保留7種顏色的圖片&#xff0c;最后獲得5400張樣圖 【教學類-55-04】20240515圖層順序挑戰&#xff08;四格長條紙加黑色邊框、4*4、7張&…

Python程序設計 文件處理(二)

實驗十二 文件處理 第1關&#xff1a;讀取宋詞文件&#xff0c;根據詞人建立多個文件 讀取wjcl/src/step1/宋詞.txt文件&#xff0c; 注意&#xff1a;宋詞文件的標題行的詞牌和作者之間是全角空格&#xff08;" ")可復制該空格 在wjcl/src/step3/cr文件夾下根據每…

【CSND博客紀念】“創作紀念日:從靈感迸發到小有成就——我的CSND博客創作之旅”

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

記錄下git的基本操作

初始化git git init git clone 拉取各分支的最新代碼 git fetch 切換分支 git checkout 分支名 提交相關操作 git add . git commit -m “提交備注” 兩個一起 git commit -am “提交備注” 如果需要撤銷操作 git log 查詢日志,提交id git revert git revert HEAD 撤銷前一…

算法分析與設計復習__遞歸方程與分治

總結自&#xff1a;【算法設計與分析】期末考試突擊課_嗶哩嗶哩_bilibili 1.遞歸&#xff0c;遞歸方程 1.1遞歸條件: 1.一個問題的解可以分解為幾個子問題的解&#xff1b; 2.這個問題與分解之后的子問題&#xff0c;除了數據規模不同&#xff0c;求解思路完全一樣; 3.存在…

【面試干貨】一個數組的倒序

【面試干貨】一個數組的倒序 1、實現思想2、代碼實現 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 1、實現思想 創建一個新的數組&#xff0c;然后將原數組的元素按相反的順序復制到新數組中。 2、代碼實現 package csdn;public class…

高效微砂沉淀澄清設備工藝流程

諸城市鑫淼環保小編帶大家了解一下高效微砂沉淀澄清設備工藝流程 微砂循環重介速沉設備 微砂高速絮凝沉淀系統巧妙地將混凝、絮凝、沉淀、分離幾個過程優化組合到一個設備中&#xff0c;并引入“微砂”&#xff0c;提升了水中懸浮固體的絮凝效率和分離效率&#xff0c;同時&…

如何幫孩子學好編程

學習編程對于孩子來說是一項非常有益的技能&#xff0c;不僅可以培養孩子的邏輯思維能力&#xff0c;還可以提高孩子的問題解決能力和創造力。以下是一些建議&#xff0c;幫助孩子學好編程&#xff1a; 選擇適合孩子的編程語言和工具&#xff1a;根據孩子的年齡和興趣選擇合適的…

一個強大的在線解析網站,無需登錄,只用把視頻鏈接粘貼進去就能免費解析下載視頻。

TiQu.cc是什么&#xff1f; TiQu.cc是一個強大的在線工具&#xff0c;讓用戶可以從包括Facebook、VK、Twitter、Tiktok、Instagram等在內的100多個平臺下載他們喜愛的視頻。不論是音樂、電視節目、電影、短片還是個人上傳的內容&#xff0c;TiQu.cc都可以幫助您隨時隨地以離線…

ChatGPT 4o 使用案例之一

2024年GPT迎來重大更新&#xff0c;OpenAI發布GPT-4o GPT-4o&#xff08;“o”代表“全能”&#xff09; 它可以接受任意組合的文本、音頻和圖像作為輸入&#xff0c;并生成任意組合的文本、音頻和圖像輸出。它可以在 232 毫秒內響應音頻輸入&#xff0c;平均為 320 毫秒&…