
Martin.Drautzburg at web
Sep 14, 2007, 1:48 PM
Views: 163
Permalink
|
|
How to pickle class derived from c++ extension
|
|
I understand that I can picke an extension class written in C/C++ by providing a __reduce__() method along with __getstate__()/__setstate__(). While I still havent gotten this to work, my main question is: How could I possibly pickle an object of a python class which is derived from the C++ extension? It seems that I can define >>> class Bar(list): ... pass and add more attributes >>> l=Bar() >>> l.x=11 and __reduce__() will show the "x" attribute >>> l.__reduce__() (<function _reconstructor at 0xb7e2cf0c>, (<class '__main__.Bar'>, <type 'list'>, []), {'x': 11}) But this does not seem to work with my extension class Foo. I defined a __getstate__() method and __reduce__() indeed shows me some state. But if I create a derived class Bar on the Python side and an object bar as an instance of that class, and add an "x" attribute to that bar object, then __reduce__ing that object shows nothing about the "x" attribute. This is in a way undestandable, as __reduce__() eventually just calls __getstate__() and the only implementation it can find is in my Foo extension class, which knows nothing abpout the Bar derived class let alone its "x" attribute. I would like to have __reduce__() do it the pyhon way as far as it cat get, and then call some magic method of my C++ class to pickle the "C++ part" of an object. Is there a way to achieve this? The "list" class seems to have something that my Foo class does not have. What is this? Or of course if there is a better way, to picke objects of classes which are derived from C++ extensions I'd be happy to hear about it. _______________________________________________ Python-Dev mailing list Python-Dev[at]python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/list-python-dev%40lists.gossamer-threads.com
|