函数对象的isinstance等价

2024-03-29 06:16:32 发布

您现在位置: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实例的实例。你知道吗

目前我有一个黑客解决方案,包括向kwargs添加一个标志,然后检查它是否存在,如果存在,则从列表中popping它。你知道吗

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


Tags: or对象实例代码nonereturnfoo单元测试