访问 a 上的 Python 属性时boost::python::object
,请使用attr
成员函数。例如:
aMethod.func_code.co_varnames
会成为
aMethod.attr("func_code").attr("co_varnames")
这是一个完整的例子。
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
#include <boost/python.hpp>
#include <boost/python/stl_iterator.hpp>
void print_varnames(boost::python::object fn)
{
namespace python = boost::python;
typedef python::stl_input_iterator<std::string> iterator;
std::vector<std::string> var_names(
iterator(fn.attr("func_code").attr("co_varnames")),
iterator());
BOOST_FOREACH(const std::string& varname, var_names)
std::cout << varname << std::endl;
}
BOOST_PYTHON_MODULE(example)
{
def("print_varnames", &print_varnames);
}
用法:
>>> def test1(a,b,c): pass
...
>>> def test2(spam, eggs): pass
...
>>> def test3(): pass
...
>>> from example import print_varnames
>>> print_varnames(test1)
a
b
c
>>> print_varnames(test2)
spam
eggs
>>> print_varnames(test3)
>>>