example-code-2e/13-protocol-abc/bingo.py

29 lines
602 B
Python
Raw Normal View History

# tag::TOMBOLA_BINGO[]
import random
from tombola import Tombola
class BingoCage(Tombola): # <1>
def __init__(self, items):
self._randomizer = random.SystemRandom() # <2>
self._items = []
self.load(items) # <3>
def load(self, items):
self._items.extend(items)
self._randomizer.shuffle(self._items) # <4>
def pick(self): # <5>
try:
return self._items.pop()
except IndexError:
raise LookupError('pick from empty BingoCage')
def __call__(self): # <6>
self.pick()
# end::TOMBOLA_BINGO[]