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.

raise ValueError('Polygons need 3+ sides')

return type.__new__(meta, name, bases, class_dict)

class Polygon(object, metaclass=ValidatePolygon):

sides = None # Especificado por subclasses

@classmethod

def interior_angles(cls):

return (cls.sides - 2) * 180

class Triangle(Polygon):

sides = 3

Se for tentado definir um polígono com menos de três lados, a validação fará

com que o comando class falhe imediatamente após o corpo de class. Isso

significa que o programa não conseguirá sequer ser iniciado se uma classe dessas

for definida.

print('Before class')

class Line(Polygon):

print('Before sides')

sides = 1

print('After sides')

print('After class')

>>>

Before class

Before sides

After sides

Traceback ...

ValueError: Polygons need 3+ sides

Lembre-se

• Use para assegurar que as subclasses são bem formadas no momento em que

são definidas, bem antes dos objetos dessa classe serem construídos.

• As metaclasses possuem sintaxes ligeiramente diferentes entre Python 2 e

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!