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.

return self._ohms

def set_ohms(self, ohms):

self._ohms = ohms

Usar esses setters e getters é bastante simples e até certo ponto funciona, mas

não é considerado código pythônico.

r0 = OldResistor(50e3)

print('Before: %5r' % r0.get_ohms())

r0.set_ohms(10e3)

print('After: %5r' % r0.get_ohms())

>>>

Before: 50000.0

After: 10000.0

Esses métodos são especialmente desajeitados em operações de atualização

imediata do atributo, como nesta adição em uma única linha.

r0.set_ohms(r0.get_ohms() + 5e3)

Esses métodos utilitários realmente simplificam a definição da interface para a

classe, facilitando encapsular funcionalidade, forçar a validação de regras de uso

e definir limites. São objetivos importantes ao projetar uma classe, pois

asseguram que o código chamador não será afetado negativamente à medida que

a classe evoluir com o tempo.

Em Python, todavia, e a não ser em raríssimos casos, uma classe jamais precisará

da implementação explícita de métodos de setter ou getter. Em vez disso, as

implementações iniciais de qualquer classe devem sempre começar com

atributos públicos bastante simples.

class Resistor(object):

def __init__(self, ohms):

self.ohms = ohms

self.voltage = 0

self.current = 0

r1 = Resistor(50e3)

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!