[Python-Dev] why doesn't print pass unicode strings on to the file object?
Guido van Rossum
guido@python.org
Tue, 18 Sep 2001 09:16:16 -0400
> Because I'd like to avoid an inflation of functions. Instead, I'd
> prefer codecs.lookup to return an object that has the needed fields,
> but behaves like a tuple for backwards compatibility.
Here's how you can do that in 2.2a3 (I wrote this incomplete example
for another situation :-):
class Stat(tuple):
def __new__(cls, t):
assert len(t) == 9
self = tuple.__new__(cls, t[:7])
self.st_seven = t[7]
self.st_eight = t[8]
return self
st_zero = property(lambda x: x[0])
st_one = property(lambda x: x[1])
# etc.
t = (0,1,2,3,4,5,6,7,8)
s = Stat(t)
a,b,c,d,e,f,g = s
assert (a, b, c, d, e, f, g) == t[:7]
assert t == s + (s.st_seven, s.st_eight)
> > Note that the tuple interface was chosen for sake of speed and
> > better handling at C level (tuples can be cached and are easily
> > parseable in C).
Alas, a tuple subclass loses some of the speed and size advantage --
the additional instance variables require allocation of a dictionary.
(And no, you cannot use __slots__ here -- the slot access mechanism
doesn't jive well with the variable length tuple structure. If we
were to subclass a list, we could add
__slots__ = ["st_seven", "st_eight"]
to the class. But that's not fully tuple-compatible.)
--Guido van Rossum (home page: http://www.python.org/~guido/)