[Tutor] access class through indexing?
Jerry Hill
malaclypse2 at gmail.com
Wed Aug 4 22:44:36 CEST 2010
On Wed, Aug 4, 2010 at 4:17 PM, Alex Hall <mehgcap at gmail.com> wrote:
> Hi all,
> Further to my questions about overriding builtin methods earlier, how
> would I make a class able to be accessed and changed using index
> notation? For example, take the following:
> deck=CardPile(52) #creates a new deck of cards
> print(len(deck)) #prints 52, thanks to my __len__ function
> for c in deck: print c #also works thanks to __iter__
> print(deck[4]) #fails with a list index out of range error
> How would I get the last one working? I tried __getattr__(self, i),
> but it did not work. I want to be able to get an arbitrary item from
> the "pile" of cards (which can be a deck, a hand, whatever), and/or
> set an element. A "pile" is just a list of Card objects, so I would
> only need to use sequence indexing, not mapping functions.
>
Implement __getitem__(self, key) (See
http://docs.python.org/reference/datamodel.html#emulating-container-types )
If you want to support slicing (access like deck[0:10]), you'll need to
handle getting a slice object as the key in addition to accepting an integer
key.
If a pile is really "just" a list of cards, you may want to look into
inheriting from list instead of re-implementing all of the functionality on
your own.
--
Jerry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100804/382df067/attachment-0001.html>
More information about the Tutor
mailing list