(一)python 資料模型

2022-03-16 17:19:58 字數 1548 閱讀 4040

1、通過實現特殊方法,自定義型別可以表現的跟內建型別一樣;

如下**,實現len, getitem,可使自定義型別表現得如同列表一樣。

import

collections

from random import

choice

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 rank in

self.ranks

for suit in

self.suits]

def__len__

(self):

return

len(self._cards)

def__getitem__

(self, position):

return

self._cards[position]

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)

defspade_hith(card):

rank_value =frenchdeck.ranks.index(card.rank)

#print(rank_value)

#print(suit_values[card.suit])

return rank_value * len(suit_values) +suit_values[card.suit]

if__name__ == '

__main__':

deck =frenchdeck()

#card = choice(deck)

#print(card)

for card in sorted(deck, key=spade_hith):

print

(str(card))

print(repr(card))

2、repr和str

(1) __repr__所返回的字串應該準確(%r),無歧義,並且盡可能表達出如何用**建立出這個被建立的物件,如repr(v);輸出vector(3, 4)

(2) __str__在str函式被呼叫(%s),或者列印乙個物件的時候被呼叫,如str(v);輸出(3,4)

(3)預設實現列印物件時,兩者沒有什麼區別

(4)兩個特殊方法,只想實現乙個時,__repr__是更好的選擇,因為如果乙個物件沒有__str__函式,而python直譯器又需要呼叫時,會用__repr__替代。

兩者的區別,參考:

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 物件的乙個基本要求就是有...