Muitas vezes, ao testar uma interface na linha de comando, é realmente conveniente ser capaz de criar um objeto simples que contém alguns atributos. Seria bom se você pudesse fazer algo assim:
obj = object()
obj.foo = 3
mas, infelizmente, você não pode (o objeto não gosta de receber atributos inesperados adicionados a ele).
Mock é uma biblioteca maravilhosa para fazer testes de unidade reais, etc. Mas se você se descobrir “apenas precisando de um objeto agora”, isso pode ser útil:
obj = type('blank_object', (object,), {})()
obj.foo = 3
function_requiring_an_object_with_foo_attribute(obj)
A linha mágica acima essencialmente cria uma nova classe com o nome ‘blank_object’, herdada do objeto e sem métodos de classe. Em seguida, ele cria imediatamente uma instância dessa classe.
O que você disse? Sim, a função type é incrível.