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.

Before: 0 amps

After: 0.01 amps

Especificar o setter em uma propriedade também permite que se faça verificação

de tipos e validação dos valores passados à classe. No exemplo de código a

seguir, definimos uma classe que assegura sempre valores positivos de

resistência elétrica:

class BoundedResistance(Resistor):

def __init__(self, ohms):

super().__init__(ohms)

@property

def ohms(self):

return self._ohms

@ohms.setter

def ohms(self, ohms):

if ohms <= 0:

raise ValueError('%f ohms must be > 0' % ohms)

self._ohms = ohms

Atribuir uma resistência inválida à propriedade levanta uma exceção.

r3 = BoundedResistance(1e3)

r3.ohms = 0

>>>

ValueError: 0.000000 ohms must be > 0

Uma exceção será levantada caso um valor inválido seja passado à função

construtora.

BoundedResistance(-5)

>>>

ValueError: -5.000000 ohms must be > 0

Isso ocorre porque BoundedResistance.__init__ chama Resistor.__init__, que

executa a atribuição self.ohms = -5. Essa atribuição provoca a chamada do

método @ohms.setter da classe BoundedResistance, executando o código de

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!