Caraca! Ele cria um atributo novo dentro do objeto! Arriscadíssimo isso! Não tem como forçar o Python a dar um erro de atributo inexistente? O pior é que um desavisado pode fazer:
r = Retangulo(7,6)
r.x = 9
//Agora eu tenho r._Retangulo__x = 7 e r.x = 9 dentro do objeto!
r.obter_area()
E achar que a área de um retângulo de 9 x 6 é 42! Imaginem isso num cenário de atualização de saldo de conta contábil a partir de um valor de lançamento, onde o sistema deverá atualizar de forma recursiva todos os saldos das contas mães?!