15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• Faça alterações incrementais usando @property para obter progressivamente

modelos de dados melhores.

• Considere refatorar uma classe e todos os códigos chamadores quando

perceber que está usando @property demais.

Item 31: Use descritores para implementar métodos

reutilizáveis de @property

O grande problema com o decorador nativo @property (consulte o Item 29:

“Use atributos comuns em vez dos métodos get e set” e o Item 30: “Considere

usar @property em vez de refatorar atributos”) é a reutilização de código. Os

métodos que ele modifica não podem ser reutilizados por mais de um atributo

dentro da mesma classe. Eles também não podem ser reutilizados por classes que

não estejam na mesma “família”.

Por exemplo, digamos que se queira uma classe que valide como porcentagem

uma nota recebida por um estudante em uma tarefa de casa.

class Homework(object):

def __init__(self):

self._grade = 0

@property

def grade(self):

return self._grade

@grade.setter

def grade(self, value):

if not (0 <= value <= 100):

raise ValueError('Grade must be between 0 and 100')

self._grade = value

Por empregar @property, essa classe é fácil de usar.

galileo = Homework()

galileo.grade = 95

Digamos que também seja desejável dar ao estudante uma nota para uma mesma

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!