Python のユーザー定義関数の場合、特別な属性を使用して関数のアリティを抽出できます。func_code
この属性は、コンパイルされた関数本体をco_argcount
表し、関数のアリティを示す属性を提供します。詳細およびその他の可能なアプローチについては、この質問を読むことを検討してください。
エラー チェックを無視すると、Boost.Python の実装はかなり簡単になります。
boost::python::extract<std::size_t>(fn.attr("func_code").attr("co_argcount"));
完全な簡単な例を次に示します。
#include <iostream>
#include <boost/python.hpp>
void print_arity(boost::python::object fn)
{
std::size_t arity = boost::python::extract<std::size_t>(
fn.attr("func_code").attr("co_argcount"));
std::cout << arity << std::endl;
}
BOOST_PYTHON_MODULE(example)
{
def("print_arity", &print_arity);
}
そしてその使用法:
>>> from example import print_arity
>>> def f1(x,y,z): pass
...
>>> print_arity(f1)
3
>>> def f1(x): pass
...
>>> print_arity(f1)
1