Python3 如何使用特殊方法

2021-10-01 16:14:48 字數 1120 閱讀 4182

特殊方法的存在是為了被python直譯器呼叫的

首先明確一點,特殊方法的存在是為了被 python 直譯器呼叫的,你自己並不需要呼叫它們。也就是說沒有my_object.__len__()這種寫法,而應該使用len(my_object)。在執行len(my_object)的時候,如果my_object是乙個自定義類的物件,那麼 python 會自己去呼叫其中由你實現的__len__方法。

然而如果是 python 內建的型別,比如列表(list)、字串(str)、位元組序列(bytearray)等,那麼 cpython 會抄個近路,__len__實際上會直接返回pyvarobject裡的ob_size屬性。pyvarobject是表示記憶體中長度可變的內建物件的 c 語言結構體。直接讀取這個值比呼叫乙個方法要快很多。

很多時候,特殊方法的呼叫是隱式的,比如for i in x:這個語句,背後其實用的是iter(x),而這個函式的背後則是x.__iter__()方法。當然前提是這個方法在 x 中被實現了。

通常你的**無需直接使用特殊方法。除非有大量的元程式設計存在,直接呼叫特殊方法的頻率應該遠遠低於你去實現它們的次數。唯一的例外可能是 __init__方法,你的**裡可能經常會用到它,目的是在你自己的子類的__init__方法中呼叫超類的構造器。

通過內建的函式(例如len、iter、str,等等)來使用特殊方法是最好的選擇。這些內建函式不僅會呼叫特殊方法,通常還提供額外的好處,而且對於內建的類來說,它們的速度更快。14.12 節中有詳細的例子。

不要自己想當然地隨意新增特殊方法,比如__foo__之類的,因為雖然現在這個名字沒有被 python 內部使用,以後就不一定了。

5868037 qq號

[email protected] qq郵箱

python3 特殊函式 call

call 的本質是將乙個類變成乙個函式 使這個類的例項可以像函式一樣呼叫 例1 class person object def init self,name,gender self.name name self.gender gender def call self,friend print my ...

python3使用 python3使用模組

python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...

Python3如何使用tabulate列印資料

需要先安裝 tabulate 模組 pi azacmcinstall 以上是把一維的dict列印出來.再看看二維的,list of dict 注 此處project函式是funcy包中的乙個功能 output 漂亮 另外,之前也用過 prettytable 但是感覺沒有tabulate簡單上手 本文...