2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-24 18:12:43 +00:00

use BOOST_PYTHON_MODULE_INIT, update getting_started2 for better documentation

[SVN r9472]
This commit is contained in:
Dave Abrahams
2001-03-07 03:53:14 +00:00
parent 00cea4ff83
commit 98b31ed073
6 changed files with 38 additions and 37 deletions

View File

@@ -12,9 +12,7 @@ namespace python = boost::python;
// Python requires an exported function called init<module-name> in every
// extension module. This is where we build the module contents.
extern "C"
DL_EXPORT(void)
initgetting_started1()
BOOST_PYTHON_MODULE_INIT(getting_started1)
{
try
{

View File

@@ -1,29 +1,28 @@
#include <iostream>
#include <string>
#include <boost/python/class_builder.hpp>
namespace python = boost::python;
namespace { // Avoid cluttering the global namespace.
// A friendly class.
class world
class hello
{
public:
hello(const std::string& country) { this->country = country; }
std::string greet() const { return "Hello from " + country; }
private:
std::string country;
public:
world(const std::string& country) { this->country = country; }
std::string greet() const { return "Hello from " + country + "!"; }
};
// A function taking a world object as an argument.
std::string invite(const world& w) {
return w.greet() + " Please come soon!";
// A function taking a hello object as an argument.
std::string invite(const hello& w) {
return w.greet() + "! Please come soon!";
}
}
extern "C"
DL_EXPORT(void)
initgetting_started2()
#include <boost/python/class_builder.hpp>
namespace python = boost::python;
BOOST_PYTHON_MODULE_INIT(getting_started2)
{
try
{
@@ -31,18 +30,18 @@ initgetting_started2()
python::module_builder this_module("getting_started2");
// Create the Python type object for our extension class.
python::class_builder<world> world_class(this_module, "world");
python::class_builder<hello> hello_class(this_module, "hello");
// Add the __init__ function.
world_class.def(python::constructor<std::string>());
hello_class.def(python::constructor<std::string>());
// Add a regular member function.
world_class.def(&world::greet, "greet");
hello_class.def(&hello::greet, "greet");
// Add invite() as a regular function to the module.
this_module.def(invite, "invite");
// Even better, invite() can also be made a member of world_class!!!
world_class.def(invite, "invite");
// Even better, invite() can also be made a member of hello_class!!!
hello_class.def(invite, "invite");
}
catch(...)
{

View File

@@ -91,9 +91,7 @@ namespace { // Avoid cluttering the global namespace.
}
}
extern "C"
DL_EXPORT(void)
initgetting_started3()
BOOST_PYTHON_MODULE_INIT(getting_started3)
{
try
{

View File

@@ -74,9 +74,7 @@ namespace { // Avoid cluttering the global namespace.
}
}
extern "C"
DL_EXPORT(void)
initgetting_started4()
BOOST_PYTHON_MODULE_INIT(getting_started4)
{
try
{

View File

@@ -103,9 +103,7 @@ BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE
BOOST_PYTHON_END_CONVERSION_NAMESPACE
extern "C"
DL_EXPORT(void)
initgetting_started5()
BOOST_PYTHON_MODULE_INIT(getting_started5)
{
try
{

View File

@@ -1,11 +1,21 @@
r'''>>> import getting_started2
>>> w = getting_started2.world('California')
>>> print w.greet()
Hello from California!
>>> print getting_started2.invite(w)
Hello from California! Please come soon!
>>> print w.invite()
Hello from California! Please come soon!
r'''>>> from getting_started2 import *
>>> hi = hello('California')
>>> hi.greet()
'Hello from California'
>>> invite(hi)
'Hello from California! Please come soon!'
>>> hi.invite()
'Hello from California! Please come soon!'
>>> class wordy(hello):
... def greet(self):
... return hello.greet(self) + ', where the weather is fine'
...
>>> hi2 = wordy('Florida')
>>> hi2.greet()
'Hello from Florida, where the weather is fine'
>>> invite(hi2)
'Hello from Florida! Please come soon!'
'''
def run(args = None):