Boa noite gente, estou estudando POO em Python e durante o curso me deparei com a seguinte situação:
Nas aulas, o instrutor nos ensina sobre atributos privados, e explica que com dois underscores, você avisa que aquele atributo é privado, e portanto não deve ser alterado (mesmo que ainda possa ser).
Até então ok, porém pouco mais adiante em um exercício vemos o seguinte código:
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.obter_area())
Onde a pergunta é: Com base no código a seguir, o que acontecerá ao executar r.obter_area() após tentar modificar o valor de r.area?
E a resposta: Imprime o valor de 42, pois o encapsulamento impede a alteração direta da variável 'area'. A variável 'area' está encapsulada pelo uso do prefixo '__', o que impede a alteração direta de seu valor. Portanto, o método 'obter_area()' retorna o valor calculado no momento da instanciação do objeto 'r' (7 * 6).
Fiquei confuso tanto com a explicação quanto com o código, pois ao testar no PyCharm o código realmente funciona, mas porque nesse caso? O atributo r.area não deveria ser ter sido alterado com os underscores apenas sendo convenções? Pois no meu entenedimento o método iria retornar o valor 7, já que antes de chamarmos o mesmo, fizemos a alteração no valor do atributo r.area... Enfim, alguém me esclarece? Tô injuriado aqui haha