自Python2.6开始,namedtuple就加入到Python里,用以构建只有少数属性但是没有方法的对象,比如数据库条目。
 | 12
 3
 4
 5
 6
 
 | from collections import namedtuple
 Card = namedtuple("Card", ["rank", "suit"])
 beer_card = Card['7', 'diamonds']
 beer_card.rank
 beer_card.suit
 
 | 
使用实例: 创建一摞纸牌
 | 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 |  import collections
 Card = collections.namedtuple("Card", ["rand", "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 suit in self.suits
 for rank in self.ranks]
 
 def __len__(self):
 return len(self._cards)
 
 def __getitem__(self, position):
 return self._cards[position]
 
 deck = FrenchDeck()
 len(deck)
 deck[0]
 
 from random import choice
 choice(deck)
 
 | 
 上面创建纸牌的代码可以说是非常的pythonic了,首先使用collections.namedtuple创建一个纸牌对象,然后创建一个套牌类。 套牌类初始方法创建了52张牌。
 特殊方法(under under method), len()的实现使得我们可以直接使用len()函数去测量对象的尺寸;getitem()函数则使我们可以方便的获取元素,并且支持切片,支持迭代(包括反向迭代)