1
resposta

Novo atributo no objeto nao declarado no mesmo

Qual a vantagem de criamos um atributo que nao foi definido no objeto ?

r = Retangulo(7,6) r.area = 7 r.obter_area()

Area nao foi criado no objeto, mas sim __area

porque o python deixa fazer isso ?

1 resposta

Olá Bruno, tudo bem?

O Python é uma linguagem dinâmica, por isso permite a criação de atributos em tempo de execução.

Em alguns casos, isso é interessante, por exemplo, quando estamos querendo adicionar um dado a uma classe que não possua ele. Mas claro, isso tem que ser feito com cuidado, pois o código pode ficar muito complexo e difícil de se manter.

O Python também permite restringir a criação desses atributos, para isso, basta sobrescrevermos o atributo __slots__ da classe:

class Retangulo:
    __slots__ = ['x', 'y']
    def __init__(self, x, y):
         self.x = x
         self.y = y
    def obter_area(self):
         return self.x * self.y

>>> r = Retangulo(7, 6)
>>> r.obter_area()
42

Se tentarmos colocar um atributo dinâmico, o Python não permite e lança uma exceção:

>>> r.area = 7
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Retangulo' object has no attribute 'area'