Я изменяю некоторый код, который покрывается модульными тестами. А внутри что-то единичных тестов, как это происходит:Эквивалент isinstance для объектов, которые являются функциями
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)
В основном куча вещей, которые позволяют использовать сокращенный при написании тестов.
Я только что сделал рефакторинг, что означает, что некоторые из непроинформированных классов объектов, которые передаются, требуют одного аргумента non-kwarg. Рефактор имеет смысл в теле кода, но приводит к сбою тестов.
Учитывая, что я предпочел бы не переписать все неисправные тесты с нуля, самое простым решением было бы что-то вроде
if isinstance(cls, Foo):
return cls(kwargs, True)
else:
return cls(kwargs)
Это не может, конечно, потому что cls
это на самом деле не является экземпляр всего, что является пример Foo
.
В настоящее время у меня есть взломанное решение, которое включает добавление флага в kwargs
, а затем проверку его присутствия и pop
пинг его из списка, если он есть.
Есть ли лучший способ проверить, будет ли объект функции возвращать экземпляр другого класса?
Что именно вы пытаетесь проверить? –
Это класс, который объект функции 'cls' представляет, является экземпляром другого класса. Я хочу что-то эквивалентное 'isinstance (cls(), Foo)', но это работает как 'isinstance (cls, Foo)'. – Batman
Что такое * return * функцией 'cls'? –