给班上
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))
答案 0 :(得分:1)
除了hasattr
之外,您还可以使用callable(publisher.publish_db_flaws)
检查该属性是否确实是可调用的函数。
如ForceBru的注释所示,可以使用inspect
模块获得更多详细信息。如果函数使用varargs或关键字args以及任何默认值,则inspect.getfullargspec(publisher.publish_db_flaws)
为您提供有关参数名称的信息。
可通过inspect.signature
获得类似信息。这为您提供了一个签名对象,该对象具有__eq__
方法,可以轻松进行比较。注意,这是Python3的首选方法。如果您需要与Python2接口兼容,请使用getfullargspec
。