C++ Python:如何检查。。。?

C++ Python:如何检查。。。?,c++,python,boost,boost-python,C++,Python,Boost,Boost Python,我想要一些关于如何检查我收到的参数的正确性的建议 检查将在C++中完成,所以如果有一个很好的使用Boosi.python(或者最好是C API)的解决方案,请告诉我。否则,请告诉我对象应该具有哪些属性以确保其符合条件 所以 如何检查对象是否为函数 如何检查对象是否是绑定方法 如何检查对象是否为类对象 如何检查一个类对象是否是另一个类的子类 如果有疑问,只需通过调用常用的Python内置代码并将其转换为C/C++,就可以获得所需的效果。我只回答Python,对于C,您将查找全局函数,例如'call

我想要一些关于如何检查我收到的参数的正确性的建议

<>检查将在C++中完成,所以如果有一个很好的使用Boosi.python(或者最好是C API)的解决方案,请告诉我。否则,请告诉我对象应该具有哪些属性以确保其符合条件

所以

  • 如何检查对象是否为函数
  • 如何检查对象是否是绑定方法
  • 如何检查对象是否为类对象
  • 如何检查一个类对象是否是另一个类的子类

  • 如果有疑问,只需通过调用常用的Python内置代码并将其转换为C/C++,就可以获得所需的效果。我只回答Python,对于C,您将查找全局函数,例如'callable',然后像调用任何其他Python函数一样调用它

  • 为什么您会关心它是一个函数而不是任何其他类型的可调用函数?如果需要,您可以使用内置的
    callable(f)
    来确定它是否可调用,但这当然不会告诉您在调用它时需要传递哪些参数。这里最好的事情通常是打电话给它,看看会发生什么

  • isinstance(f,types.MethodType)
    但是如果它是一个内置的方法,那就没有帮助了。由于调用函数或绑定方法的方式没有区别,您可能只想检查它是否可以如上所述调用

  • isinstance(someclass,type)
    注意这将包括内置类型

  • issubclass(someclass,baseclass)


  • 我有两个非常规的建议:

    1) 不要检查。Python文化只是根据需要使用对象,如果不起作用,则会发生异常。提前检查会增加开销,并可能限制人们如何使用您的代码,因为您的检查比您需要的更严格


    2)不要在C++中进行检查。当组合Python和C(或C++)时,我建议只做C++中需要做的事情。其他一切都应该用Python完成。因此,在Python包装器函数中检查参数,然后调用未选中的C++入口点。

    为什么要检查类型?JBE:它是一个事件系统。我需要检查事件的类型,以便知道哪些回调对它感兴趣。关于你的第二点,这正是我现在正在做的。:)我的“实际”类对Python来说是不可知的,只有包装器类负责接口。你的第一点:我想给脚本编写者一些关于他们在哪里出错的说明。当软件崩溃时是不愉快的,但它没有告诉你为什么。我只检查最低限度,我不想太严格。