* Torsten Mohr:
thanks a lot for your hint, it works fine.
I get an error for "a = Abc(4, 5)", seems the parameters are
forwarded to array's __init__ as they are.
No, with CPython they're forwarded to __new__.
Not sure if i understand this correctly, if i derive from other
classes (like wxpython widgets) i always call the bases __init__ .
Well, creation of an object happens in two phases: allocation and
initialization.
Allocation reserves memory for the object and creates a sort of default object
in that memory. This is the job of __new__. The object doesn't exist at all
before __new__ is called.
Initialization then outfits the object with all that's required for a proper
object of class T. This is the job of __init__. __init__ as passed as argument
the default object created by __new__.
CPython's array.array does both in __new__. It does not override the __init__ it
inherits from 'object'. To wit:
>>> import array
>>> id( array.array.__init__ )
10965560
>>> id( object.__init__ )
10965560
>>> array.array.__init__ is object.__init__
True
>>> _
So overriding __init__ doesn't override any of array.array's functionality.
But you'd have to override __new__ anyway, because with array.array the first
argument has to be a type code specifying the element type of the array object
the __new__ should create. An alternative design instead of those type codes
could have had one subclass for each element type, essentially what you're
doing, except you're only doing one of those subclasses. Then there would be no
issue with __new__.
Though i explicitly
call __init__() for array.
That's the constructor inherited from 'object', it takes no args (except
the self arg).
Is there a way to find out what i need to call?
Testing. :-)
I haven't found much in
the documentation. From writing C extensions i knew about the "new" entry
in the PyTypeObject struct but it seems there's more behind it.
In docs.python.org i did not find much, is there an URL where i can read
more?
Don't know, sorry. Google?
Cheers,
- Alf
--
http://mail.python.org/mailman/listinfo/python-list