Python 資料模型

2021-10-02 17:43:11 字數 1450 閱讀 4806

資料模型規範了 python 構建自身模組的介面。在 python 直譯器遇到特殊的句法時,會使用特殊方法(即魔術方法)去啟用基本的物件操作,這些特殊方法以 「__」 開頭與結尾。

通過實現特殊方法,自定義資料型別可以表現得跟內建型別一樣,從而寫出更 pythonic 的**。

python 物件的乙個基本要求就是有合理的字串表示,可以通過定義__repr____str__方法來實現。前者方便類的定義者除錯和記錄日誌,後者則是給終端使用者看的。

特殊方法會被 python 直譯器呼叫,無需手動呼叫。而我們一般通過內建函式來使用特殊方法,這些內建函式通常還會提供額外的好處。如對於內建的類來說,呼叫它們的速度會更快。(例如對於len(),cpython會直接讀取內建物件的c語言結構體的屬性)。

唯一的例外即為__init__()方法,通常會使用它在子類__init__()中呼叫超類的構造器。

常見的特殊方法:

方法名用途

__repr__

返回物件準確、無歧義的字串表示

__str__

將物件傳入str()print()時呼叫,應返回使用者友好的字串

__len__

將物件傳入len()時呼叫

__getitem__

使用運算子用於獲取值時呼叫,使物件支援索引、切片,並可迭代

__bool__

將物件傳入bool(),或將物件用在乙個需要布林值的上下文時呼叫

__abs__、__complex__、__int__、

__float__

進行相應數值轉換時呼叫

__add__、__sub__、__mul__、

__truediv__

過載相應運算子

當實現某些特殊方法使得自定義物件表現地向 python 自有的資料型別時(如實現__len____getitem__使物件表現得像序列),通常將特殊方法的具體實現**給內建型別。

對於自定義類例項,除非對於__bool____len__有特殊的實現,否則布林值總是為真。在乙個需要布林值的上下文裡,python 隱式呼叫bool(x),而這個函式的背後為呼叫x.__bool__()的結果;若該類沒有定義__bool__,則嘗試呼叫x.__len__(),若返回為0,則bool值才為false,否則為true

python 資料模型

usr bin env python coding utf 8 import collections card collections.namedtuple card rank suit class frenchdeck 通過實現特殊方法利用python資料模型的好處 1.作為你類的使用者,他們不必...

Python資料模型

1 了解python資料模型和介面的概念 2 掌握特殊方法的定義,作用和基本用法。1 資料模型 data model 是資料特徵的抽象,這裡是對python框架的描述。資料模型規範了python自身構建模組的介面,模組包括但不限於序列 迭代器 函式 類和上下文管理器。2 介面 介面泛指實體把自己提供...

python資料模型

參考流暢的python第一章 python資料模型定義了一些特別操作,使用者通過重寫這些特殊方法即可實現一些特別操作。比如 init 我理解這個就是建構函式 len 通過重寫該函式可以實現len 方法 str 通過重寫該函式可以實現物件字串化,即將物件以字串的形式顯示 call 通過重寫該函式,物件...