Quando utilizamos os atributos diretamente da classe, ele pode ser alterado igualando a uma referência nova, caso tenhamos criado (no caso, r.area=7). E sempre o melhor modo, seria buscar os valores por algum método, correto?
Uma outra dúvida: Por que foi colocado a área = x*y na primeira parte do código, e não no método "obter_area"? Não seria mais organizável deixar fórmulas em métodos?
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
print(r.area)
print(3*' * *')
print(r.obter_area())
print(3*' * *')