The Python dunder methods
Much of Python's special syntax is there to access special methods of the
object in question. For example a[x] is special syntax for
a.__getitem__(x), a call to the __getitem__ special method of the object a.
To see how the __getitem__ and __len__ special methods work, let's take as
an example a deck of playing cards, a so-called French deck.
import collections Card = collections.namedtuple("Card", ["rank", "suit"]) class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list("JQKA") suits = list("♠♦♣♥") 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]
Now we can make a card
Card(7, '♥')
Card(rank=7, suit='♥')
And indeed a deck
deck = FrenchDeck() len(deck)
52
Here we use the len() syntax which calls the __len__ method of the
FrenchDeck object.