細數Python的特殊方法一 集合類

2022-03-10 06:10:52 字數 3676 閱讀 7861

__len__:返回物件的長度

__getitem__:獲得某一項的值

__setitem__:設定莫一項的值

__delitem__刪除某一項

__contains__:包含某一項

實現說明:

1) 模擬一副撲克牌,包含兩個類,乙個是卡片類(card),乙個是 撲克(puke),puke類包含52張牌,13個大小(ajqk,2-10),4張花色("redheart", "spades", "diamond", "club").

2) 卡片類包含兩個屬性,rank(等級)、color(花色),以及重寫了__eq__方法,判斷卡片的相同性,為後續puke類中的

__getitem__,__setitem__方法中的判斷做鋪墊;

3) 實現puke中的__len__,__getitem__,__setitem__,__contains__等方法。

**實現:

card類**如下:

class card:

def __init__(self, rank, color):

self.rank = rank

self.color = color

def __repr__(self):

return "card rank is %s and color is %s" % (self.rank, self.color)

def __eq__(self, other):

if isinstance(other, (tuple, )):

if self.rank == other[0] and self.color == other[1]:

return true

if isinstance(other, (card,)):

if self.rank == other.rank and self.color == other.color:

return true

return false

說明:

1) __init__方法包含兩個屬性,rank和color

2) 重寫__repr__方法,格式化後續的card類物件的列印資訊

3) 重寫__eq__方法,只有rank、color兩個屬性都滿足的情況下,才能判斷卡片是相同的。

puke

類的實現:

class puke:

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

colors = ["redheart", "spades", "diamond", "club"]

def __init__(self):

"""初始化生成牌

"""self._cards = [card(rank, color) for rank in puke.ranks

for color in puke.colors]

def __len__(self):

"""返回一副撲克中牌的張數

:return:

"""return len(self._cards)

def __getitem__(self, item):

"""獲得某一張牌

:param item:

:return:

"""assert item is not none

result = none

if isinstance(item, (int,)):

result = self._cards[item]

elif isinstance(item, (tuple,)):

result =

for card in self._cards:

if card == item:

return card

return result

def __setitem__(self, key, value):

"""設定某一項的值

:param key: rank+color,為一元組

:param value: other rank+color,元組

:return: void

"""assert key is not none

if not isinstance(key, (tuple,)) or not isinstance(value, (tuple,)):

return

for card in self._cards:

if card == key:

card.rank = value[0]

card.color = value[1]

return

def __contains__(self, item):

"""判斷是否包含乙個牌

:param item: 元組

:return:

"""for card in self._cards:

if card == item:

return true

return false

說明:

1) __init__方法,初始化52中卡片

2) __len__方法,返回卡片的數量,肯定等於52

3) 在__getitem__方法的實現中,兩種實現方法來獲得某一張卡片,乙個是根據索引號,乙個是根據卡片的rank和color屬性來定位一張卡片。

4) __setitem__方法中,key是rank和color的元組,實現卡片的定位

5) __contains__方法,判斷卡片是否在撲克牌中。

**測試:

if __name__ == '__main__':

puke1 = puke()

print("一副牌的張數為%d " % len(puke1))

print("牌分別為:")

#迴圈,同樣會呼叫__getitem__

for card in puke1:

print(card)

card5 = puke1[5]

print("第5張牌的rank為%s,花色為:%s" % (card5.rank, card5.color))

carda = puke1[("a", "spades")]

print("a牌的花色分別為:%s" % carda.color)

print("隨機選張牌")

from random import choice

# 隨機選擇,同樣會呼叫__getitem__

card = choice(puke1)

print(card)

#會呼叫__setitem__方法

puke1[("7", "spades")] = ("7", "gagagwer")

#再次列印puke

for card in puke1:

print(card)

#會呼叫__container__方法

print(("7", "gagagwer") in puke1)

總結:迴圈會呼叫__getitem__,如果某個物件要能迴圈,必須具備___getitem__方

Python基礎之 一 集合 set

集合 是乙個無序的,不重複的資料組合。主要作用 去重 把列表變成集合就自動去重 關係測試 測試倆組資料的交集,差集,並集等關係 關係測試共有7種,如下 名稱 方法名 簡寫符號 解釋 交集 s.intersection t s t 返回乙個新的 set 包含 s 和 t 中的公共元素 並集 s.uni...

python的特殊方法

來自 流暢的python 字串 位元組序列 repr str format bytes 數值轉換 abs bool complex int float hash index 集合模擬 len getitem setitem delitem contains 迭代列舉 iter reversed ne...

Redis的使用 (一)集群的搭建

主題詞 負載均衡高可用 redis集群 nginx一般用作負載均衡伺服器,可見處於網路中非常重要的位置,一旦nginx伺服器宕機無法提供服務,那麼將影響嚴重。所以需要負載均衡高可用。高可用 主從備份 keepalived nginx實現主從備份 keepalived的作用是檢測伺服器的狀態,如果有一...