什麼是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 < y 调用 x.__lt__(y) |
__le__(self, other) | 定义小于等于号的行为:x <= y 调用 x.__le__(y) |
__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中文網其他相關文章!