Replies: 1 comment
-
I think your request is reasonable. I prefer the way to remove a pickling instead of having multiple overloads. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi.
First of all thanks for the great project, has simplified getting my students to use our C++ code a lot!
I recently started on adding pickling support and ran into two problems (I opened two issues):
Issue:
I have a default pickling method that is automatically registered and would like to override that in certain cases.
Description:
Adding a second
def(pybind11::pickling...)
does not work since the previous version is sued. Addingpybind11::prepend()
leads to unexpected results - the default getstateis used together with the new
setstate. The reason is that in the
pickle_factorythe
extraargument is only added to the
setter. I can't find a workaround but was wondering if in this case having multiple overloads for
setstate/getstatemakes sense? Possibly a new
def(pickle(...))` should remove the first one or always prepend (that was easy enough to do)?Solution:
At least failing if
prepend
is used in the extra argument would probably avoid some unexpected behavior.What worked for me was testing for
pybind11:prepend
in theExtra
variadic template when callingpickle_factory::execute
and if present adding that to the__getstate__
registration.I can provide a MR and possibly a test with that approach if it makes sense.
But as mentioned above perhaps simply removing a previous registration would be better since I believe that overloads would not be called anyway - I'm not that far down the rabbit hole yet to implement this approach.
Beta Was this translation helpful? Give feedback.
All reactions