import json
Card=namedtuple('Card',['tank','suit'])
class Deck:
__tanks=[str(n) for n in range(2,11)]+list('JQKA')
__suits=['黑桃','红心','方块','梅花']
def __init__(self):
self.__card=[Card(tank,suit) for tank in self.__tanks
for suit in self.__suits]
def __getitem__(self, item):
return self.__card[item]
def __setitem__(self, key, value):
self.__card[key]=value
def __str__(self):
return json.dumps(self.__card,ensure_ascii=False)
def __len__(self):
return len(self.__card)
#1.查看所有牌.实现print(),前提是重新的__str__方法
deck=Deck()
print(deck)
#2.通过choice,抓一张牌,前提是重新实现了__getitem__方法.因为choice只能调用序列化seq的对象。且
# 而实现seq对象的内置方法是__getitem
from random import choice
print(choice(deck[5]))
#3.通过shuffle,洗牌。洗牌一样是只有调用序列化seq对象,即要重新实现__setitem__方法,同时洗牌要建立在有长度的情况。
#故要重新实现len方法
from random import shuffle
shuffle(deck)
print(deck)