[C++-sig] Copying objects derived in python from C++?

Mark Williams mark at image-engine.com
Thu Jun 7 02:48:34 CEST 2007


Ralf W. Grosse-Kunstleve wrote:
> This could be connected to missing pickle support. I think copy.copy() 
> essentially pickles/unpickles to make the copy.
> I'd think if you add pickle support to your class it will work.
> I'm not sure about the details. See the "pickle suite" docs (link on 
> main Boost.Python page).
> Ralf

Thanks, this certainly seems to be the case. If I add 
".enable_pickling()" to my Base class definition, then the example I 
posted works as expected. However, if I then modify the Derived class 
constructor so that it takes an argument, e.g.:

class Derived(Base):
    def __init__(self, arg):
        Base.__init__(self)

d = Derived(None)
func(d)
d_copy = copy.copy(d)
func(d_copy)

I get an error such as:

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    d_copy = copy.copy(d)
  File "python2.5/copy.py", line 95, in copy
    return _reconstruct(x, rv, 0)
  File "python2.5/copy.py", line 322, in _reconstruct
    y = callable(*args)
TypeError: __init__() takes exactly 2 arguments (1 given)


Cheers,
Mark




More information about the Cplusplus-sig mailing list