2016-12-02 2 views
1

Я изменяю некоторый код, который покрывается модульными тестами. А внутри что-то единичных тестов, как это происходит:Эквивалент 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 пинг его из списка, если он есть.

Есть ли лучший способ проверить, будет ли объект функции возвращать экземпляр другого класса?

+0

Что именно вы пытаетесь проверить? –

+0

Это класс, который объект функции 'cls' представляет, является экземпляром другого класса. Я хочу что-то эквивалентное 'isinstance (cls(), Foo)', но это работает как 'isinstance (cls, Foo)'. – Batman

+0

Что такое * return * функцией 'cls'? –

ответ

1

Это звучит, как вы хотите

issubclass(cls, Foo) 
+0

Спасибо. Это именно то, чего я хотел. – Batman

+1

Как вы поняли, что это то, о чем просили, находится вне меня, хаха –

Смежные вопросы