from collections import namedtuple
import json
Card = namedtuple('Card',['rank','suit'])
class FranchDeck:
ranks = [str(n) for n in range(2,11)]+list('JKQA')
suits = ['红桃','方块','梅花','黑桃']
def __init__(self):
self._cards = [Card(rank,suit) for rank in FranchDeck.ranks
for suit in FranchDeck.suits]
def __len__(self):
return len(self._cards)
def __getitem__(self, item):
return self._cards[item]
def __setitem__(self, key, value):
self._cards[key] = value
def __str__(self):
return json.dumps(self._cards,ensure_ascii=False)
deck = FranchDeck()
print(deck[0]) # 依赖__getitem__方法
from random import choice
print(choice(deck)) # 依赖__len__方法
print(choice(deck))
from random import shuffle
shuffle(deck) # 依赖__setitem__方法
print(deck) # 依赖__str__方法
print(deck[:5]) # 实现了对象直接切片,依赖item方法
#################################################
100人名字和性别年龄不同,要求过滤名字和性别相同的
class A:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def __eq__(self,other):
if self.name == other.name and self.sex == other.sex:
return Ture
return False
def __hash__(self):
return hash(self.name + self.sex)
a = A(...)
b = A(...)
print(set(a,b)) #集合去重依赖hash和eq两种方法