什麼是Python魔法方法
魔法方法就如同它的名字一樣神奇,總能在你需要的時候為你提供某種方法來讓你的想法實現。魔法方法是指Python內部已經包含的,被雙下劃線所包圍的方法,這些方法在進行特定的操作時會自動被調用,它們是Python面向對像下智慧的結晶。初學者掌握Python的魔法方法也就變得特別重要了。
為什麼要使用Python魔法方法
使用Python的魔法方法可以讓Python的自由度變得更高,當不需要重寫時魔法方法也可以在規定的預設情況下生效,在需要重寫時也可以讓使用者根據自己的需求來重寫部分方法來達到自己的期望。而且眾所周知Python是支援物件導向的語言Python的基本魔法方法就使得Python在面對物件方面做得更好。
魔法方法名稱 |
說明 |
# | 基礎魔法方法(較為常用) |
__new__(cls[, ...]) | 1.實例化物件時第一個被呼叫的方法 2.其參數直接傳遞給__init__方法處理 3.我们一般不会重写该方法 |
__init__(self[, ...]) | 构造方法,初始化类的时候被调用 |
__del__(self) | 析构方法,当实例化对象被彻底销毁时被调用(实例化对象的所有指针都被销毁时被调用) |
__call__(self[, args...]) | 允许一个类的实例像函数一样被调用:x(a, b) 调用 x.__call__(a, b) |
__len__(self) | 定义当被 len() 调用时的行为 |
__repr__(self) | 定义当被 repr() 调用时的行为 |
__str__(self) | 定义当被 str() 调用时的行为 |
__bytes__(self) | 定义当被 bytes() 调用时的行为 |
__hash__(self) | 定义当被 hash() 调用时的行为 |
__bool__(self) | 定义当被 bool() 调用时的行为,应该返回 True 或 False |
__format__(self, format_spec) | 定义当被 format() 调用时的行为 |
属性相关的方法 | |
__getattr__(self, name) | 定义当用户试图获取一个不存在的属性时的行为 |
__getattribute__(self, name) | 定义当该类的属性被访问时的行为 |
__setattr__(self, name, value) | 定义当一个属性被设置时的行为 |
__delattr__(self, name) | 定义当一个属性被删除时的行为 |
__dir__(self) | 定义当 dir() 被调用时的行为 |
__get__(self, instance, owner) | 定义当描述符的值被取得时的行为 |
__set__(self, instance, value) | 定义当描述符的值被改变时的行为 |
__delete__(self, instance) | 定义当描述符的值被删除时的行为 |
比较操作符 | |
__lt__(self, other) | 定义小于号的行为:x |
__le__(self, other) | 定义小于等于号的行为:x |
__eq__(self, other) | 定义等于号的行为:x == y 调用 x.__eq__(y) |
__ne__(self, other) | 定义不等号的行为:x != y 调用 x.__ne__(y) |
__gt__(self, other) | 定义大于号的行为:x > y 调用 x.__gt__(y) |
__ge__(self, other) | 定义大于等于号的行为:x >= y 调用 x.__ge__(y) |
算数运算符 | |
__add__(self, other) | 定义加法的行为:+ |
__sub__(self, other) | 定义减法的行为:- |
__mul__(self, other) | 定义乘法的行为:* |
__truediv__(self, other) | 定义真除法的行为:/ |
__floordiv__(self, other) | 定义整数除法的行为:// |
__mod__(self, other) | 定义取模算法的行为:% |
__divmod__(self, other) | 定义当被 divmod() 调用时的行为 |
__pow__(self, other[, modulo]) | 定义当被 power() 调用或 ** 运算时的行为 |
__lshift__(self, other) | 定义按位左移位的行为: |
__rshift__(self, other) | 定义按位右移位的行为:>> |
__and__(self, other) | 定义按位与操作的行为:& |
__xor__(self, other) | 定义按位异或操作的行为:^ |
__or__(self, other) | 定义按位或操作的行为:| |
反运算(类似于运算方法) | |
__radd__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rsub__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rmul__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rtruediv__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rfloordiv__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rmod__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rdivmod__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rpow__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rlshift__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rrshift__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__rxor__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
__ror__(self, other) | 当被运算对象(左边的操作对象)不支持该运算时被调用 |
增量赋值运算 | |
__iadd__(self, other) | #定義賦值加法的行為: = |
__isub__(self, other) | 定義賦值減法的行為:-= |
#__imul__(self, other) | 定義賦值乘法的行為:*= |
__itruediv__(self, other) | 定義賦值真除法的行為:/= |
__ifloordiv__(self, other) | 定義賦值整數除法的行為://= |
__imod__(self, other) | 定義賦值取模演算法的行為:%= |
__ipow__(self, other[, modulo]) | 定義賦值冪運算的行為:**= |
__ilshift__ (self, other) | 定義賦值位元左移位的行為: |
__irshift__(self, other) | #定義賦值位元右移位的行為:>>= |
__iand__(self, other) | 定義賦值位元與運算的行為:&= |
__ixor__(self, other) | 定義賦值位元異或運算的行為:^= |
定義賦值位元或運算的行為:|= | |
##一元運算子 | |
定義正號的行為: x | |
定義負號的行為:-x | |
定義當被abs() 呼叫時的行為 | |
定義按位求反的行為:~x | |
類型轉換 | |
#定義當被complex() 呼叫時的行為(需要傳回適當的值) | |
定義當被int() 呼叫時的行為(需要傳回適當的值) | |
定義當被float() 呼叫時的行為(需要傳回適當的值) | |
#定義當被round() 呼叫時的行為(需要傳回適當的值) | |
1. 當物件被應用在切片表達式中時,實作整形強制轉換 | 2. 如果你定義了一個可能在切片時用到的定制的數值型,你應該定義 __index__#
3. 如果__index__ 被定義,則__int__ 也需要被定義,且傳回相同的值 |
上下文管理(with 語句) | |
#1. 定義當使用with 語句時的初始化行為 | 2. __enter__ 的回傳值被with 語句的目標或as 後的名字綁定|
#1. 定義當一個程式碼區塊被執行或終止後上下文管理器應該做什麼 | 2. 一般用來處理異常,清除工作或做一些程式碼區塊執行完畢之後的日常工作|
# | ##容器類型(一般用於操作容器類別) |
定義當被len() 呼叫時的行為(一般會傳回容器類別的長度) | |
#定義取得容器中指定元素的行為,相當於self[key] | |
定義設定容器中指定元素的行為,相當於self[key] = value | |
定義刪除容器中指定元素的行為,相當於del self[key] | |
定義當迭代容器中的元素的行為 | |
#定義當被reversed() 呼叫時的行為 | |
定義當使用成員測試運算子(in 或not in)時的行為 |
以上是深入學習Python之魔法方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。