[C++-sig] A couple of simple BP V2 questions
dave at boost-consulting.com
Tue Nov 12 23:15:53 CET 2002
"Scott A. Smith" <ssmith at magnet.fsu.edu> writes:
> Hi Dave,
> Thanks for the response.
>> > 1.) In the Hello tutorial, I see that one uses the Python Module
>> > name when creating instances of a class object.
>> > >>> import hello planet = hello.World()
>> > But in other places, it seems like the module name is not
>> > required.
>> > I don't recall ever needing the module name for any exposed
>> > classes from V1.
>> It was no different in V1.
> Well, you forced me to search for a way to explain how you could possibly state that! I've never
> before even tried using the module name method and was fairly successful using my exported classes with
> V1. What I found out was that I didn't know the difference between
> >>> import hello and >>> from hello import *
> Now I do, probably about doubling my Python abilities. Since the
> day I first tried Python (not so long ago, as this was the day I
> first saw Boost.Python also), I have always used "from PyModule
> import *" and never knew any different. Nor can I find mention of
> it in my O'Reilly Python book. But I did find out about it from a
> Google search and then
> http://www.python.org/doc/current/ref/import.html, so that mystery
> is solved. I take it good Python programmers largely frown on using
> "from PyModule import *"?
Yes, and rightly so.
> As for where the tutorial seems to not have any module name, on
> the line
>>>> x = Var('pi')
> should be something like x = hello.Var('pi') if it is in the hello
> module, unless I am again mistaken.
Yes, I guess you're right. We start leaving out a bunch of detail on
that page. Joel, would you consider what we can do to clarify that?
>> > How do I exposes a simple constant, not in any class but
>> > globally defined.
>> scope().attr("PLANCK") = 6.6260755e-34;
> But this is a re-definition isn't it?
Huh? What do you mean by "re-definition"?
> I don't mind doing that, but then if I change my C++ code (maybe to
> add more significant digits or the foundations of physics change)
> I'll have to change the Python export too. I can live with that
Oh, well of course you can write:
scope().attr("PLANCK") = PLANCK;
>> > Can I do it "read-only" as suggested in the tutorial when
>> > explaining class Var where it uses .def_readonly("name",
>> > &Var::name)?
>> Nope. This is a Python feature/limitation. There's no way to add properties to modules, and they
>> don't have overridable __getattr__/__setattr__ functions.
> I guess that is still OK. But then would the statement
>>>> X = PyModule.PLANCK Y = 1.e-27
> or even
> PyModule.PLANCK = 1.e-27
> actually alter what the value of PLANCK is within the Python interpreter?
Sure. It's just a binding in the module.
dave at boost-consulting.com * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution
More information about the Cplusplus-sig