1
resposta

Comprtamento estranho 2

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())

pelo que entendi da resposta dda no tópico https://cursos.alura.com.br/forum/topico-comportamento-estranhoa-307331

o trecho de código r.area = 7 cria um novo atributo na classe, então o objeto r ficaria com mais um atributo chamado area que ao que parece seria um atributo publico e esse atributo só existiria no objeto r, se eu instanciar um no objeto chamado r2 = Retangulo(2,5) o atributo area não ira existir. Objeto r2 só possuirá os atributos previamente declarados na classe. E assim como nessa declaração r2.volume = 5 o atributo volume só vai existir no objeto r2

Sendo assim eu teria dois objetos com os seguintes atributos em memoria:

Objeto: r

        __x
        __y
        __area
        area

Objeto: r2

        __x
        __y
        __area
        volume

Essas afirmações que fiz estão corretas?

1 resposta

Olá, Luisandro!

Você está absolutamente correto em suas afirmações. Em Python, é possível adicionar novos atributos a um objeto depois que ele foi criado. No seu exemplo, quando você faz r.area = 7, você está adicionando um novo atributo chamado area ao objeto r da classe Retangulo. Este novo atributo não afeta de maneira nenhuma o atributo __area que foi definido na classe Retangulo.

Da mesma forma, quando você cria um novo objeto r2 = Retangulo(2,5) e faz r2.volume = 5, você está adicionando um novo atributo chamado volume ao objeto r2. Este atributo é exclusivo do objeto r2 e não afeta nem o objeto r nem qualquer outro objeto da classe Retangulo.

Portanto, suas afirmações sobre os atributos dos objetos r e r2 estão corretas. O objeto r tem os atributos __x, __y, __area e area, enquanto o objeto r2 tem os atributos __x, __y, __area e volume.

Espero ter ajudado e bons estudos!