Generally how that situation is handled on the Python side is to use the container emulation API, so that assigning all values would look like this to a user of your class:
data[:] = 42. To do this, you just need to write a small c++ wrapper to expose the __setitem__(self, key, value) function, which accepts (or extracts) a slice object for the key and then calls your class operator= function. Or, you could just stick with the assign function that you created, which may be better if your class isn't supposed to look like a container. This may actually be less error prone. Here is the Python container emulation documentation: http://docs.python.org/reference/datamodel.html#emulating-container-types Other people may have better suggestions. Regards, Bill ________________________________________ From: cplusplus-sig-bounces+wladwig=wdtinc....@python.org [cplusplus-sig-bounces+wladwig=wdtinc....@python.org] On Behalf Of Hans Roessler [hansroess...@yahoo.de] Sent: Monday, May 25, 2009 9:08 AM To: cplusplus-sig@python.org Subject: [C++-sig] wrapping operator= Hello! I want to wrap with boost.python a C++ class "DataCube" which has overloaded the operator=. The constructor DataCube::DataCube(double x) allocates huge amounts of memory and fills it with x's. The DataCube::operator=(double x) just overwrites the already allocated memory with x's. Now in C++ these commands first allocate memory, which is filled with 0.'s, and then overwrite the memory with 42.'s: >DataCube data(0.) >data=42. In Python these commands first build the DataCube as desired, but then set data=42. (now data is a float), where the reference to the DataCube is lost: >data=DataCube(0.) >data=42. I have circumvented this by replacing the second line with > data.assign(42.) with a function assign which is defined appropriately, but I would prefer to use the same assignment as in C++. Finally the question: Can I define the DataCube class in Python, so that the data variable above will behave as in C++, when I write "data=42." ? In other words, is there any possibility in Python that "x=y" does NOT make x a reference to y? Thank you Hans _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig