15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

r1.ohms = 10e3

Implementado dessa forma, uma atualização imediata do atributo (neste exemplo

também uma adição) é muito mais fácil de ler por parecer algo mais natural e

visualmente limpo.

r1.ohms += 5e3

Mais tarde, se for necessário implementar um comportamento especial sempre

que um atributo for modificado, o código pode perfeitamente migrar para o

decorador @property e seu atributo setter correspondente. No exemplo de

código a seguir, definimos uma nova subclasse de Resistor, que permite variar a

corrente elétrica (variável current) quando for atribuído um valor à propriedade

voltage. Observe que, para que a classe funcione como esperado, os nomes do

setter e do getter devem ser iguais ao da propriedade pretendida.

class VoltageResistance(Resistor):

def __init__(self, ohms):

super().__init__(ohms)

self._voltage = 0

@property

def voltage(self):

return self._voltage

@voltage.setter

def voltage(self, voltage):

self._voltage = voltage

self.current = self._voltage / self.ohms

A partir de agora, quando a propriedade voltage executar o método setter

voltage, a propriedade current também será modificada para que a equação (Lei

de Ohm) esteja sempre equilibrada.

r2 = VoltageResistance(1e3)

print('Before: %5r amps' % r2.current)

r2.voltage = 10

print('After: %5r amps' % r2.current)

>>>

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!