利用collections.namedtuple 快速生成類python
import collections Card = collections.namedtuple('Card', ['rank', '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() >>> deck[0] Card(rank='2', suit='spades') >>> deck[-1] Card(rank='A', suit='hearts')
若是my_object 是一個自定義類的對象,那麼 Python 會本身去調用其中由 你實現的 len 方法。
Python 內置的類型,好比列表(list)、字符串(str)、 字節序列(bytearray)等,那麼 CPython
會抄個近路,__len__ 實際 上會直接返回 PyVarObject 裏的 ob_size 屬性。程序員
for i in x: 這個語句
背後其實用的是 iter(x)
而這個函數的背後則是 x.__iter__() 方法。dom
好比 foo 之類的
由於雖然如今這個名字沒有被 Python 內部使用,之後就不必定了函數
一個輪子 隨機抽牌ui
>>> from random import choice >>> choice(deck) Card(rank='3', suit='hearts') >>> choice(deck) Card(rank='K', suit='spades') >>> choice(deck) Card(rank='2', suit='clubs')