Objeto Python simples que permite adições de atributos

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.