Python資料模型

2021-10-25 07:20:36 字數 1350 閱讀 8982

python資料模型是python中物件的屬性。資料模型其實是對python框架的描述,它規範了這門語言自身構建模組的介面,這些模組包括但不限於序列、迭代器、函式、類和上下文管理器。

import collections

card = collections.namedtuple('card',['rank','suit'])

class frenchdeck:

ranks = [str(n) for n in range(2,11)] + list('jqka')

suits = 'spades diamonds clubs hearts'.split()

def __init__(self):

self._cards = [card(rank,suit) for suit in self.suits

for rank in self.ranks]

def __len__(self):

return len(self._cards)

def __getitem__(self,position):

return self._cards[position]

deck = frenchdeck()

len(deck)

deck[0]

1.因為__getitem__方法把 [ ] 操作交給了self._cards列表,deck類自動支援切片操作。通過實現__len__和__getitem__這兩個特殊方法,frenchdeck就跟python自有序列資料型別一樣,可以體現python的核心語言特性(迭代和切片)。同時這個類還可以用於標註庫中諸如random.choice、reversed和sorted這些函式。這個在pytorch資料讀取的實現類(繼承自data.dataset)中實現__getitem__方法來實現資料讀入。

2.如何使用特殊方法

2.1特殊方法是為了被python直譯器呼叫的。在呼叫自定義類時,python解析器會自己呼叫其中由你實現的__len__方法。不需要object.__len__(),而是len(object)即可,然而如果是python內建的型別,比如list/str/bytearray,那麼cpython會超個近路,__len__會直接返回pyvarobject裡的ob_size屬性,pyvarobject時表示記憶體中長度可變的內建物件的c語言結構體,直接讀取之歌比呼叫乙個方法要快很多。通過內建函式(len/iter/str)來使用特殊方法(__len__/__iter__/)是最好的選擇。這些內建函式不僅會呼叫特殊方法,而且速度更快。

2.2 bool(x)背後呼叫x.__bool__()方法,如果不存在__bool__方法,那麼bool(x)會嘗試呼叫x.__len__(),若返回0,bool()返回false。

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 直譯器遇到特殊的句法時,會使用特殊方法 即魔術方法 去啟用基本的物件操作,這些特殊方法以 開頭與結尾。通過實現特殊方法,自定義資料型別可以表現得跟內建型別一樣,從而寫出更 pythonic 的 python 物件的乙個基本要求就是有...