[C++-sig] boost.pyton scope bug?

Gennadiy Rozental rogeeff at gmail.com
Fri Mar 19 22:44:55 CET 2010


Jim Bosch <talljimbo <at> gmail.com> writes:

> 
> On Fri, 2010-03-19 at 19:55 +0000, Gennadiy Rozental wrote:
> > I am doing something like this in export part of mymodule:
> > 
> > scope S = class_<X>("X", no_init );
> > 
> > class_<Y>( "Y",... )
> > ...
> > ;
> > 
> > In Python I do see mymodule.X.Y, but mymodule.X.Y.__name__ is 'mymodule.Y'
> > 
> 
> Hmm.  In the same situation, I simply get mymodule.X.Y.__name__ ==
> 'Y' (and mymodule.X.__name__ == 'X') - no module prefixes at all.  That
> matches the pure-python inner class result, at least on my system.

You right. I got it wrong when reported the error. The problem, is that when I
print mymodule.X.Y I am getting <class 'mymodule.Y'> which is wrong IMO
 
> I do get mymodule.X.__module__ == 'mymodule' and mymodule.X.Y.__module__
> == 'mymodule', but that's also correct as far as mirroring the
> pure-python inner class result.

Well I hoped to mimic some kind of subnamespace with scope. Thus the module
should be mymodule.X or the name should be X.Y

> Note that you can change the __module__ attribute; I often import my
> wrapped names into different submodules in a package and adjust their
> __module__ accordingly to make a Python interface that mirrors the C++
> namespaces better - but all that has to be done in Python; boost python
> can't do it for you (maybe Py++ could?)

Can you show an example?

I am currently tweaking this Python as well (post loading) like this:

mymodule.X.Y.__name__ = 'X.Y'

It's still not completely satisfactory, since help(mymodule.X) does not do the
right job, but at least it does not show Y as 'mymodule.Y'

Gennadiy



More information about the Cplusplus-sig mailing list