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 ?
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 ?
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'