如何在运行时检查类中的参数和方法的数量

时间:2019-03-15 16:02:53

标签: python-3.x

给班上

   class TestClassRequiredMethods:
        called = False

        def publish_db_flaws(self, x):
            self.called = True

我想检查类是否具有某种方法和预期数量的参数。 我解决了一半,现在我可以检查对象是否具有属性,但是找不到找到检查此方法中预期有多少个参数的方法。

if not hasattr(publisher, 'publish_db_flaws'):
    raise TypeError('The publisher must contain a "publish_db_flaws()" method')

答案

可接受的答案对于Python 2来说效果很好,如果您使用的是版本3,则可以使用:

import inspect 

class Publisher:
    def publish_db_flaws(self, params_string:str, params_integer:int):
        pass


publisher = Publisher()
print(inspect.signature(publisher.publish_db_flaws))
print(inspect.getfullargspec(publisher.publish_db_flaws))
  • inspect.signature将仅带来方法的签名。
  • inspect.getfullargspec显示有关参数的非常完整的信息。

1 个答案:

答案 0 :(得分:1)

除了hasattr之外,您还可以使用callable(publisher.publish_db_flaws)检查该属性是否确实是可调用的函数。

如ForceBru的注释所示,可以使用inspect模块获得更多详细信息。如果函数使用varargs或关键字args以及任何默认值,则inspect.getfullargspec(publisher.publish_db_flaws)为您提供有关参数名称的信息。 可通过inspect.signature获得类似信息。这为您提供了一个签名对象,该对象具有__eq__方法,可以轻松进行比较。注意,这是Python3的首选方法。如果您需要与Python2接口兼容,请使用getfullargspec