作为函数的对象的等价实例

时间:2016-12-02 04:03:44

标签: python

我正在改变一些单元测试所涵盖的代码。在单元测试内部会发生这样的事情:

def create_object(cls, arg1=None, arg2=None, arg3=None, **kwargs):
    kwargs['arg1'] = arg1 or DEFAULT1
    kwargs['arg2'] = arg2 or DEFAULT2
    kwargs['arg3'] = arg3 or DEFAULT3
    return cls(kwargs)

基本上是一堆允许我们在编写测试时使用速记的东西。

我刚刚完成了一个重构,这意味着传入的一些未实例化的对象类需要一个非kwarg参数。重构在代码体中是有意义的,但导致测试失败。

鉴于我不想从头开始重写所有失败的测试,最简单的解决方案就是

if isinstance(cls, Foo):
    return cls(kwargs, True)
else:
    return cls(kwargs)

这当然失败了,因为cls实际上并不是Foo实例的任何实例。

目前我有一个hacky解决方案,包括向kwargs添加一个标志,然后检查它是否存在,如果是,则pop从列表中ping它。

有没有更好的方法来检查函数对象是否会返回另一个类的实例?

1 个答案:

答案 0 :(得分:1)

这听起来像你想要的

issubclass(cls, Foo)