En Thu, 24 Apr 2008 00:32:37 -0300, Michael Torrie <[EMAIL PROTECTED]> escribió:

Jeffrey Barish wrote:
Marc 'BlackJack' Rintsch wrote:
Please simplify the code to a minimal example that still has the problem and *show it to us*. It's hard to spot errors in code that nobody except
you knows.

Here it is:

import copy

class Test(int):
    def __new__(cls, arg1, arg2):
                            ^^^^^^^
The exception is saying that copy.copy is not providing this 3rd
argument.  I might be a bit dense, but what would arg2 be for?  Isn't
arg1 supposed to be the object instance you are copying from?  If so,
arg2 is superfluous.

I agree. In case arg2 were really meaningful, use __getnewargs__ (see )

import copy

class Test(int):
    def __new__(cls, arg1, arg2):
        return int.__new__(cls, arg1)
    def __init__(self, arg1, arg2):
        self.arg2 = arg2
    def __getnewargs__(self):
        return int(self), self.arg2

py> t = Test(3, 4)
py> print type(t), t, t.arg2
<class '__main__.Test'> 3 4
py> t_copy = copy.copy(t)
py> print type(t_copy), t_copy, t_copy.arg2
<class '__main__.Test'> 3 4

But note that subclassing int (and many other builtin types) doesn't work as expected unless you redefine most operations:

py> x = t + t_copy
py> print type(x), x
<type 'int'> 6
py> t += t_copy
py> print type(t), t
<type 'int'> 6

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to