I'd like some advice on how to check for the correctness of the parameters I receive.
The checking is going to be done in C++, so if there's a good solution using Boost.Python (preferably) or the C API, please tell me about that. Otherwise, tell me what attributes the object should have to ensure that it meets the criteria.
So...

How do you check that an object is a function?
How do you check that an object is a bound method?
How do you check that an object is a class object?
How do you check that a class object is a child of another class?
I have two unconventional recommendations for you:
1) Don't check.  The Python culture is to simply use objects as you need to, and if it doesn't work, then an exception will occur.  Checking ahead of time adds overhead, and potentially limits how people can use your code because you're checking more strictly than you need to.
2) Don't check in C++.  When combining Python and C (or C++), I recommend only doing things in C++ that need to be done there.  Everything else should be done in Python.  So check your parameters in a Python wrapper function, and then call an unchecked C++ entry point.
Python: How to check that...?