У меня есть класс Foo с методом isValid. Затем у меня есть метод bar (), который получает объект Foo и поведение которого зависит от того, действителен он или нет.
Для проверки этого я хотел передать некоторый объект в bar, метод isValid которого всегда возвращает False. По другим причинам я не могу создать объект Foo во время тестирования, поэтому мне нужен объект для его подделки. Сначала я подумал о создании наиболее общего объекта и добавлении к нему атрибута isValid для использования его в качестве Foo. Но это не совсем сработало:
>>> foo = object()
>>> foo.isValid = lambda : False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'isValid'
Я обнаружил, что у объекта нет __dict__
, поэтому вы не можете добавить к нему атрибуты. На этом этапе я использую обходной путь для создания типа на лету для этой цели, а затем создаю объект этого типа:
>>> tmptype = type('tmptype', (), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
Но это кажется слишком длинным выстрелом. Должен быть какой-то общедоступный общий тип, который я мог бы использовать для этой цели, но какой?