我想了解如何检查我收到的参数的正确性。
检查将在C ++中完成,因此如果使用Boost.Python(最好)或C API有一个很好的解决方案,请告诉我这个问题。否则,请告诉我该对象应具有哪些属性以确保它符合标准。
因此...
答案 0 :(得分:3)
如果有疑问,只需通过调用通常的Python内置函数并将其转换为C / C ++来确定如何获得所需的效果。我只会回答Python,对于C,你会查找全局,例如'callable',然后像任何其他Python函数一样调用它。
为什么你会关心它是一个函数而不是任何其他类型的可调用函数?如果你想要,你可以通过使用内置callable(f)
来查明它是否可调用,但当然不会告诉你在调用时需要传递哪些参数。这里最好的事情通常是调用它,看看会发生什么。
isinstance(f, types.MethodType)
但如果它是内置的方法,那将无济于事。由于您调用函数或绑定方法的方式没有区别,您可能只想检查它是否可以按上述方式调用。
isinstance(someclass, type)
请注意,这将包含内置类型。
issubclass(someclass, baseclass)
答案 1 :(得分:0)
我有两个非传统的建议:
1)不要检查。 Python文化只是根据需要使用对象,如果它不起作用,则会发生异常。提前检查会增加开销,并可能限制人们使用代码的方式,因为您的检查比您需要的更严格。
2)不要检查C ++。结合Python和C(或C ++)时,我建议只用C ++做一些需要在那里完成的事情。其他一切都应该用Python完成。因此,请在Python包装函数中检查您的参数,然后调用未经检查的C ++入口点。