python 的物件天生擁有一些神奇的方法,它們總被雙下劃線所包圍,他們是物件導向的 python 的一切。
他們是可以給你的類增加特殊方法,如果你的物件實現(過載)了這些方法中的某乙個,那麼這個方法就會在特殊的情況下被 python 所呼叫,你可以定義自己想要的行為,而這一切都是自動發生的。
python 的這些方法非常強大,然而隨之而來的則是責任。了解正確的方法去使用非常重要!
方法名含義
基本的方法
__new__方法
1.__new__是在乙個物件例項化的時候所呼叫的第乙個方法
2.它的第乙個引數是這個類,其他的引數是用來直接傳遞給 __init__方法
3.__new__決定是否要使用該 __init__方法,因為 __new__可以呼叫其他類的構造方法或者直接返回別的例項物件來作為本類的例項,如果 __new__沒有返回例項物件,則 __init__不會被呼叫
4. __new__主要是用於繼承乙個不可變的型別比如乙個 tuple 或者 string
__init__方法
構造器,當乙個例項被建立的時候呼叫的初始化方法
__del__方法
析構器,當乙個例項被銷毀的時候呼叫的方法
__call__方法
允許乙個類的例項像函式一樣被呼叫:x(a, b) 呼叫 x.__call__方法(a, b)
__len__方法
定義當被 len() 呼叫時的行為
__repr__方法
定義當被 repr() 呼叫時的行為
__str__方法
定義當被 str() 呼叫時的行為
__bytes__方法
定義當被 bytes() 呼叫時的行為
__hash__方法
定義當被 hash() 呼叫時的行為
__bool__方法
定義當被 bool() 呼叫時的行為,應該返回 true 或 false
__format__方法
定義當被 format() 呼叫時的行為
有關屬性
__getattr__方法
定義當使用者試圖獲取乙個不存在的屬性時的行為
__getattribute__方法
定義當該類的屬性被訪問時的行為
__setattr__方法
定義當乙個屬性被設定時的行為
__delattr__方法
定義當乙個屬性被刪除時的行為
__dir__方法
定義當 dir() 被呼叫時的行為
__get__方法
定義當描述符的值被取得時的行為
__set__方法
定義當描述符的值被改變時的行為
__delete__方法
定義當描述符的值被刪除時的行為
比較操作符
__lt__方法
定義小於號的行為:x < y 呼叫 x.__lt__方法(y)
__le__方法
定義小於等於號的行為:x <= y 呼叫 x.__le__方法(y)
__eq__方法
定義等於號的行為:x == y 呼叫 x.__eq__方法(y)
__ne__方法
定義不等號的行為:x != y 呼叫 x.__ne__方法(y)
__gt__方法
定義大於號的行為:x > y 呼叫 x.__gt__方法(y)
__ge__方法
定義大於等於號的行為:x >= y 呼叫 x.__ge__方法(y)
算數運算子
__add__方法
定義加法的行為:+
__sub__方法
定義減法的行為:-
__mul__方法
定義乘法的行為:*
__truediv__方法
定義真除法的行為:/
__floordiv__方法
定義整數除法的行為://
__mod__方法
定義取模演算法的行為:%
__divmod__方法
定義當被 divmod() 呼叫時的行為
__pow__方法
定義當被 power() 呼叫或 ** 運算時的行為
__lshift__方法
定義按位左移位的行為:<<
__rshift__方法
定義按位右移位的行為:>>
__and__方法
定義按位與操作的行為:&
__xor__方法
定義按位異或操作的行為:^
__or__方法
定義按位或操作的行為:
反運算__radd__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rsub__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rmul__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rtruediv__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rfloordiv__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rmod__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rdivmod__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rpow__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rlshift__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rrshift__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rand__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__rxor__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
__ror__方法
(與上方相同,當左運算元不支援相應的操作時被呼叫)
增量賦值運算
__iadd__方法
定義賦值加法的行為:+=
__isub__方法
定義賦值減法的行為:-=
__imul__方法
定義賦值乘法的行為:*=
__itruediv__方法
定義賦值真除法的行為:/=
__ifloordiv__方法
定義賦值整數除法的行為://=
__imod__方法
定義賦值取模演算法的行為:%=
__ipow__方法
定義賦值冪運算的行為:**=
__ilshift__方法
定義賦值按位左移位的行為:<<=
__irshift__方法
定義賦值按位右移位的行為:>>=
__iand__方法
定義賦值按位與操作的行為:&=
__ixor__方法
定義賦值按位異或操作的行為:^=
__ior__方法
定義賦值按位或操作的行為:
一元操作符
__pos__方法
定義正號的行為:+x
__neg__方法
定義負號的行為:-x
__abs__方法
定義當被 abs() 呼叫時的行為
__invert__方法
定義按位求反的行為:~x
型別轉換
__complex__方法
定義當被 complex() 呼叫時的行為(需要返回恰當的值)
__int__方法
定義當被 int() 呼叫時的行為(需要返回恰當的值)
__float__方法
定義當被 float() 呼叫時的行為(需要返回恰當的值)
__round__方法
定義當被 round() 呼叫時的行為(需要返回恰當的值)
__index__方法
1.當物件是被應用在切片表示式中時,實現整形強制轉換
2.如果你定義了乙個可能在切片時用到的定製的數值型,你應該定義 __index__方法
3.如果 __index__被定義,則 __int__也需要被定義,且返回相同的值
上下文管理(with語句)
__enter__方法
1.定義當使用 with 語句時的初始化行為
2.__enter__的返回值被 with 語句的目標或者 as 後的名字繫結
__exit__方法
1.定義當乙個**塊被執行或者終止後上下文管理器應該做什麼
2.一般被用來處理異常,清除工作或者做一些**塊執行完畢之後的日常工作
容器型別
__len__方法
定義當被 len() 呼叫時的行為(返回容器中元素的個數)
__getitem__方法
定義獲取容器中指定元素的行為,相當於 self[key]
__setitem__方法
定義設定容器中指定元素的行為,相當於 self[key] = value
__delitem__方法
定義刪除容器中指定元素的行為,相當於 del self[key]
__iter__方法
定義當迭代容器中的元素的行為
__reversed__方法
定義當被 reversed() 呼叫時的行為
__contains__方法
定義當使用成員測試運算子(in 或 not in)時的行為
需求 15 帶下劃線
pragma mark uiunderlinedbutton.implementation uiunderlinedbutton uiunderlinedbutton underlinedbutton void drawrect cgrect rect 使用 uiunderlinedbutton b...
帶下劃線的輸入框
在我們的專案中很多地方要用到edittext,原始的edittext有那麼醜,如何做了 請看下面幾種方法 1 edittext可以通過layer list來繪製背景 xmlns android android shape rectangle 框為矩形 android color ffffff 用白色...
nginx帶下劃線header無效問題
1.問題 由於在http請求頭的頭部中設定了一些自定義字段,剛好這些欄位中含有下劃線,比如bundle name這種,後端在進去獲取頭部資訊時,發現取不到對應的值 原因是 nginx對header name的字元做了限制,預設 underscores in headers 為off,表示如果head...