基礎:如果你想…所以,你寫…python呼叫…初始化乙個例項x = myclass()x.__init__()作為乙個字串的」官方」表示repr(x)x.__repr__()作為乙個字串str(x)x.__str__()作為位元組陣列bytes(x)x.__bytes__()作為格式化字串format(x, format_spec)x.__format__(format_spec)- __init__()方法在建立例項後呼叫.如果你想控制建立過程,請使用__new__()方法 - 按照慣例, __repr__() 應該返回乙個有效的python表示式的字串 - __str__()方法也被稱為你的print(x)
迭代相關如果你想…所以,你寫…python呼叫…遍歷乙個序列iter(seq)seq.__iter__()從迭代器中獲取下乙個值next(seq)seq.__next__()以相反的順序建立乙個迭代器reversed(seq)seq.__reversed__()- __iter__()無論何時建立新的迭代器,都會呼叫該方法. - __next__()每當你從迭代器中檢索一下個值的時候,都會呼叫該方法 - __reversed__()方法並不常見.它需要乙個現有序列並返回乙個迭代器,該序列是倒序的順序.
屬性如果你想…所以,你寫…python呼叫…得到乙個屬性x.my_propertyx.__getattribute__(『my_property『)獲得乙個屬性x.my_propertyx.__getattr__(『my_property『)設定乙個屬性x.my_property = valuex.__setattr__(『my_property『, value)闡述乙個屬性del x.my_propertyx.__delattr__(『my_property『)列出所有屬性和方法dir(x)x.__dir__()如果你的類定義了乙個__getattribute__()方法,python將在每次引用任何屬性或方法名時呼叫它.如果你的類定義了乙個__getattr__()方法,python只會在所有普通地方查詢屬性後呼叫它.如果乙個例項x定義了乙個屬性 color, x.color將不會呼叫x.__getattr__(『color『); 它將簡單地返回已經定義的x.color值.__setattr__()只要你為屬性指定值,就會呼叫該方法.__delattr__()只要刪除屬性,就會呼叫該方法.__dir__()如果您定義乙個__getattr__() 或者 __getattribute__() 方法,該方法很有用.通常情況下,呼叫dir(x)只會列出常規屬性和方法.__getattr__()和__getattribute__()方法之間的區別很微妙但很重要.
函式類通過定義call()方法,您可以建立乙個可呼叫類的例項 - 就像函式可呼叫一樣.
如果你想…所以,你寫…python呼叫…來」呼叫」像函式一樣的例項my_instance()my_instance.__call__()行為如果你的類作為一組值的容器 - 也就是說,如果問你的類是否」包含」乙個值是有意義的 - 那麼它應該定義下面的特殊方法,使它像乙個集合一樣.
如果你想…所以,你寫…python呼叫…序列的數量len(s)s.__len__()否包含特定的值x in ss.__contains__(s)字典(對映)如果你想…所以,你寫…python呼叫…通過它的key來獲得值x[key]x.__getitem__(key)通過它的key來設定乙個值x[key] = valuex.__setitem__(key, value)刪除鍵值對del x[key]x.__delitem__(key)為丟失的key提供預設值x[nonexistent_key]x.__missing__(nonexistent_key)數字如果你想…所以,你寫…python呼叫…加x + yx.__add__(y)減x - yx.__sub__(y)乘x * yx.__mul__(y)整除x / yx.__trueiv__(y)除x // yx.__floordiv__(v)取餘x % yx.__mod__(y)整除與取餘divmod(x, y)x.__divmod__(y)平方x ** yx.__pow__(y)左移x << yx.__lshift__(y)友移x >> yx.__rshift__(y)按位and運算x & yx.__and__(y)按位xor或運算x ^ yx.__xor__(y)按位or運算`xy`上述一組特殊方法採用第一種方法:給定x / y,它們提供了一種方法讓x說」我知道如何用y整除自己」.以下一組特殊方法解決了第二種方法:它們為y提供了一種方法來說」我知道如何成為分母,並將自己整除x」.
如果你想…所以,你寫…python呼叫…加x + yx.__radd__(y)減x - yx.__rsub__(y)乘x * yx.__rmul__(y)整除x / yx.__rtrueiv__(y)除x // yx.__rfloordiv__(v)取餘x % yx.__rmod__(y)整除與取餘divmod(x, y)x.__rdivmod__(y)平方x ** yx.__rpow__(y)左移x << yx.__rlshift__(y)友移x >> yx.__rrshift__(y)按位and運算x & yx.__rand__(y)按位xor或運算x ^ yx.__rxor__(y)按位or運算`xy`可是等等!還有更多!如果你正在進行」就地」操作,如x /= 3則可以定義更多特殊的方法.
如果你想…所以,你寫…python呼叫…加x + yx.__iadd__(y)減x - yx.__isub__(y)乘x * yx.__imul__(y)整除x / yx.__itrueiv__(y)除x // yx.__ifloordiv__(v)取餘x % yx.__imod__(y)整除與取餘divmod(x, y)x.__idivmod__(y)平方x ** yx.__ipow__(y)左移x << yx.__ilshift__(y)友移x >> yx.__irshift__(y)按位and運算x & yx.__iand__(y)按位xor或運算x ^ yx.__ixor__(y)按位or運算`xy`還有一些」單個數」數**算可以讓你自己對類似數字的物件進行數**算.
如果你想…所以,你寫…python呼叫…負數-xx.__neg__()正數+xx.__pos__()絕對值abs(x)x.__abs__()逆~xx.__invert__()複數complex(x)x.__complex__()整數int(x)x.__int__()浮點數float(x)x.__float__()四捨五入到最近的整數round(x)x.__round__()四捨五入到最近的n位數round(x, n)x.__round__(n)最小整數math.ceil(x)x.__ceil__()最大整數math.floor(x)x.__floor__()截斷x到0的最接近的整數math.trunc(x)x.__trunc__()數字作為列表索引a_list[x]a_list[x.__index__()]比較如果你想…所以,你寫…python呼叫…等於x == yx.__eq__(y)不等於x != yx.__ne__(y)小於x < yx.__lt__(y)小於等於x <= yx.__le__(y)大於x > yx.__gt__(y)大於等於x >= yx.__ge__(y)布林if x:x.__bool__()序列化如果你想…所以,你寫…python呼叫…物件副本copy.copy(x)x.__copy__()深拷貝copy.deepcopy(x)x.__deepcopy__()序列化乙個物件pickle.dump(x, file)x.__getstate__()序列化乙個物件pickle.dump(x, file)x.__reduce__()序列化乙個物件pickle.dump(x, file, protocol_version)x.__reduce_ex__(protocol_version)取出恢復後的狀態x = pickle.load(fp)x.__getnewargs__()取出恢復後的狀態x = pickle.load(fp)x.__setstate__()with 語句with塊限定了執行時上下文;在執行with語句時,」進入」上下文,並在執行塊中的最後乙個語句後」退出」上下文.
Python魔法方法 基本的魔法方法
new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...
python 魔法方法
魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...
python魔法方法
python魔術方法是特殊方法的暱稱。它是簡單而又強大,為了被python直譯器呼叫而存在的方法。python提供豐富的元物件協議,讓語言的使用者和核心開發者擁有並使用同樣的工具 例子引用 流暢的python 一摞python風格的紙牌 import collections namedtuple用來...