Implementing Tuples with Named Items

B

Bryan

in the python cookbook 2nd edition, section 6.7 (page 250-251), there a problem
for implementing tuples with named items. i'm having trouble understanding how
one of commands work and hope someone here can explain what exactly is going on.
without copying all the code here, here is the gist of the problem:

from operator import itemgetter

class supertup(tuple):
def __new__(cls, *args):
return tuple.__new__(cls, args)

setattr(supertup, 'x', property(itemgetter(0)))


i understand what itemgetter does,

i understand what property does, and i understand what setattr does. i tested
this problem myself and it works, but i can't understand how t.x evaluates to 2
in this case. how does itemgetter (and property) know what tuple to use? in my
itemgetter sample, the tuple is passed to itemgetter so it's obvious to see
what's going on. but in the supertup example, it isn't obvious to me.


thanks,

bryan
 
P

Peter Otten

Bryan said:
in the python cookbook 2nd edition, section 6.7 (page 250-251), there a
problem
for implementing tuples with named items. i'm having trouble
understanding how one of commands work and hope someone here can explain
what exactly is going on.
without copying all the code here, here is the gist of the problem:

from operator import itemgetter

class supertup(tuple):
def __new__(cls, *args):
return tuple.__new__(cls, args)

setattr(supertup, 'x', property(itemgetter(0)))



i understand what itemgetter does,


i understand what property does, and i understand what setattr does. i
tested this problem myself and it works, but i can't understand how t.x
evaluates to 2 in this case. how does itemgetter (and property) know what
tuple to use? in my itemgetter sample, the tuple is passed to itemgetter
so it's obvious to see what's going on. but in the supertup example, it
isn't obvious to me.

Perhaps it helps to see the "intermediate" steps between a standard property
definition and your setattr() example:
.... def getx(self): return self[0]
.... x = property(getx)
.... gety = itemgetter(1)
.... y = property(gety)
.... z = property(itemgetter(2))
....(4, 3, 2, 1, 0)

class T:
def method(self): pass

and

class T:
pass

def method(self): pass
T.method = method

are both creating a class 'T' with a method 'method'. setattr() is only
needed if you don't know the attribute's name at compile time -- a method
is just and attribute of a class object.

Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,128
Latest member
ElwoodPhil
Top