第十章 - 序列的修改、散列和切片

序列的修改、散列和切片

基本的序列协议 —— __len__ 和 __getitem__

什么是协议:

  在面向对象编程中,协议是非正式的接口,只在文档中定义,在代码中不定义。例如Python的序列协议只需要__len__和__getitem__两个方法。任何类只要使用标准的签名和语义实现了这两个方法,就能用在任何期待序列的地方。这也叫鸭子类型。

 

实现__len__ 和 __getitem__

import collections

Card = collections.namedtuple("Card", ["rank", "suit"])
class Poker(object): 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, item): return self._cards[item] pokers = Poker() print(len(pokers)) >>> 52 print(pokers[10]) >>> Card(rank='Q', suit='spades')

 

posted @ 2017-07-26 22:32  Vincen_shen  阅读(147)  评论(0)    收藏  举报