On Tue, Jan 26, 2010 at 2:28 PM, Torsten Mohr <tm...@s.netic.de> wrote:
> Is there a way to find out what i need to call? 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? > http://docs.python.org/reference/datamodel.html#basic-customization talks about __new__() and __init__(). The basic rule of thumb is that when you inherit from an immutable type, you need to override __new__, and when you inherit from a mutable type you need to override __init__. I don't think that rule of thumb applies here, though, since an array.array is mutable. The actual rule is that you need to override __new__ if the class you're inheriting from overrides __new__. I don't think there's a straightforward way to know that ahead of time unless you look at the source code for the class. Either that, or you just see that you get a TypeError when initializing your object and realize it means you need to override the constructor. It would be nice if the TypeError was a little more explicit about what was going on, though. Here's what I get in IDLE for a class similar to yours: >>> import array >>> class my_a(array.array): def __init__(self, a, b): array.array.__init__(self, 'B') >>> a = my_a(1, 2) Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> a = my_a(1, 2) TypeError: array() argument 1 must be char, not int It would be nice if the traceback mentioned something about array.__new__() instead of just array(). -- Jerry
-- http://mail.python.org/mailman/listinfo/python-list