Olá, Nícolas. Tudo bem?
Como você criou um novo atributo, o .area, você precisaria chamar um método que o retornasse para poder ver seu conteúdo, como o obter_area(), por exemplo. Isso só é possível quando você muda o retorno do método obter_area() para self.area, ou seja, você está retornando o atributo que você acabou de criar fora da classe.
Quando o retorno do método é self.__area, o resultado é 42 porque o atributo __area já tinha sido criado na classe, e ele recebe um cálculo.
Por exemplo, se você não criar um novo atributo chamado .area, e deixar o retorno do obter_area() como self.area, dessa forma:
class Retangulo:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y
        self.__area = x * y
    def obter_area(self):
        return self.area   #<-----
r = Retangulo(7,6)
#r.area = 7
r.obter_area()
Você receberá o seguinte erro:
AttributeError: 'Retangulo' object has no attribute 'area'
Ou seja, não podemos retornar o self.area pois não o criamos. Por isso, quando criamos o método através do r.area = 7, podemos utilizá-lo como retorno no método obter_area() por meio do self.area.
Espero ter contribuído, Nícolas. Se tiver mais alguma dúvida, estou à disposição. Bons estudos =)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!