Python:如何检查……

Python: How to check that...?

本文关键字:检查 何检查 Python      更新时间:2023-10-16

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

检查将在c++中完成,所以如果有一个好的解决方案使用Boost。Python(最好)或C API,请告诉我。否则,请告诉我该对象应该具有哪些属性以确保它符合标准。

所以…

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

当有疑问时,只需通过调用通常的Python内置函数并将其转换为C/c++来确定如何获得所需的效果。我只回答Python,对于C,你可以查找全局变量,比如'callable',然后像调用其他Python函数一样调用它。

  1. 为什么你要关心它是一个函数而不是任何其他类型的可调用?如果你想,你可以通过使用内置的callable(f)来发现它是否可调用,但当然,这不会告诉你调用它时需要传递哪些参数。这里最好的方法通常是调用它,看看会发生什么。

  2. isinstance(f, types.MethodType),但这不会帮助,如果它是一个内置的方法。由于如何调用函数绑定方法没有区别,您可能只是想检查它是否像上面那样可调用。

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

  4. issubclass(someclass, baseclass)

我有两个非传统的建议:

1)不检查。Python的文化是根据需要简单地使用对象,如果它不起作用,则会发生异常。提前检查增加了开销,并且潜在地限制了人们如何使用你的代码,因为你的检查比你需要的更严格。

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