En Sat, 10 Mar 2007 02:36:41 -0300, Alan Isaac <ai****@american.edu>
escribió:
I am probably confused about immutable types.
But for now my questions boil down to these two:
- what does ``tuple.__init__`` do?
Nothing. tuple.__init__ does not even exist, as tuples are immutable, they
are fully initialized with __new__ (the actual constructor)
- what is the signature of ``tuple.__init__``?
Already said; it does not exist.
These questions are stimulated by
http://aspn.activestate.com/ASPN/Coo.../Recipe/303439
Looking at that, what fails if I leave out the following line? ::
tuple.__init__(self)
For exaple, if I try::
class Test1(tuple):
def __init__(self,seq):
pass
I seem to get a perfectly usable tuple.
What initialization is missing?
Nothing!
Next, the signature question.
I'm guessing the signature is something like
tuple.__init__(self, *args, **kwargs)
with nothing done with anything but self.
As a trivial illustrative example::
class Test2(tuple):
def __init__(self,seq):
tuple.__init__(self, "foo", "bar")
seems to cause no objections.
And does nothing; the tuple is already constructed (try with "print self"
before the tuple.__init__ call).
(That recipe is a bit old, anyway, I think that tuples *never* have used
__init__)
Better look for other "named tuples"/"record"/"struct" recipes on the
CookBook.
The signature is like you said, but it's not a tuple method, it's an
object method instead:
pytuple.__init__
<slot wrapper '__init__' of 'object' objects>
The only important thing is that it says: of 'object' objects, not: of
'tuple' objects. Compare with:
pytuple.__len__
<slot wrapper '__len__' of 'tuple' objects>
One last question: where should I have looked
to answer these questions?
Uhm... Python Language Reference, section 3.4.1
Python/C API Reference Manual, section 10.3, Type objects.
The C source code, object.c
Or asking here :)
--
Gabriel Genellina