G
groups.20.thebriguy
I've noticed that there's a few functions that return what appears to
be a tuple, but that also has attributes for each item in the tuple.
For example, time.localtime() returns a time.time_struct, which looks
like a tuple but also like a struct. That is, I can do:
Anyway, I guess there's a few of ways to do this. In the case above,
it would seem reasonable to override __getitem__() and other things to
get that result.
To my question... It seems like a useful but very simple way to
accomplish the above (that is, to have your return value accessible as
both a sequence and a struct) is to subclass tuple. Something like
this:
def foo():
class NewTuple(tuple): pass
x = NewTuple((1,2))
x.a, x.b = x
return x
And so I can do:
x = foo()
print x
print x.a
print x.b
And the result is:
(1, 2)
1
2
So, the question I have is just a style and/or pattern question...
Does anyone do this? Does is seem reasonably intuitive, or ugly? Is
there a better way? Thoughts?
-bri
be a tuple, but that also has attributes for each item in the tuple.
For example, time.localtime() returns a time.time_struct, which looks
like a tuple but also like a struct. That is, I can do:
21time.localtime() (2006, 1, 18, 21, 15, 11, 2, 18, 0)
time.localtime()[3] 21
time.localtime().tm_hour
Anyway, I guess there's a few of ways to do this. In the case above,
it would seem reasonable to override __getitem__() and other things to
get that result.
To my question... It seems like a useful but very simple way to
accomplish the above (that is, to have your return value accessible as
both a sequence and a struct) is to subclass tuple. Something like
this:
def foo():
class NewTuple(tuple): pass
x = NewTuple((1,2))
x.a, x.b = x
return x
And so I can do:
x = foo()
print x
print x.a
print x.b
And the result is:
(1, 2)
1
2
So, the question I have is just a style and/or pattern question...
Does anyone do this? Does is seem reasonably intuitive, or ugly? Is
there a better way? Thoughts?
-bri