Hello,
after some time I get back to the gnucash python bindings.
I worked on a str method for GncNumeric. It's in the example_script
dir
(https://github.com/Gnucash/gnucash/blob/maint/bindings/python/example_scripts/str_methods.py)
I changed it to python3. Then I began to wonder about the relationshipp
of
the SwigObject and the wrapping object.
In this case it's something like
<gnucash.gnucash_core_c._gnc_numeric; proxy of <Swig Object of type
'_gnc_numeric *' at 0x7f11908da840> >
and
<gnucash.gnucash_core.GncNumeric object at 0x7f118f76d6d8>
When I have the GncNumeric object I can access the SwigObject through
its instance property.
The other way round seems not as simple.
My method __gncnumeric__str__ overwrites the __str__ method using
add_method.
In this method self points to the swig object. I cannot use the methods
of GncNumeric as
it is the layer of the wrapping object.
To access these methods I used to instantiate a
GncNumeric(instance=self) as a temporary self.
But that seems not right as this probably already exists.
I wondered if I could know about the wrapping object when I had the
instance only. I did not
find a way. I stumbled over an interesting comment in
https://github.com/Gnucash/gnucash/blob/69fef8277fde56e7d2df700b21c63c19c115852a/bindings/python/function_class.py#L50
# why reimpliment __new__? Because later on we're going to
# use new to avoid creating new instances when existing instances
# already exist with the same __instance value, or equivalent __instance
# values, where this is desirable...
I did not find "later on". But if that works I can safely do
GncNumeric(instance=self) as it
would reuse the existing GncNumeric object.
But nevertheless I wondered if we could put a link to the GncNumeric in
the Swig Level. I tried
it:
https://github.com/c-holtermann/gnucash/commit/a6c2adf7d29c4367728a4fa920307ee595eefa5a
(link to my fork)
Interstingly some Swig objects can be added to and some others not.
GncNumeric works while
QofSession doesn't. So I made it a try block for now.
Having done that I can get to the GncNumeric (sort of higher self) from
the Swig object:
https://github.com/c-holtermann/gnucash/commit/2f35b550709ad4131aca0e7309f6bb4b0f984b84
Well I found it interesting to think these things through. Maybe someone
can tell me about
the mysterious "later on" in the cited comment. At this point I find it
useful to have a
way from the instance to the wrapping object through some kind of link
as I suggested in
the patch to function_class.
regards,
Christoph Holtermann
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel