21.12.2022 Views

python_para_desenvolvedores_2ed

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

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

Metaclasses 137

O módulo abc define a metaclasse ABCMeta e os decoradores abstractmethod e

abstractproperty que identificam os métodos e propriedades que devem ser

implementadas.

# -*- coding: latin1 -*-

from abc import ABCMeta, abstractmethod

class Nave(object):

__metaclass__ = ABCMeta

@abstractmethod

def mover(self, x0, x1, v):

# Sem implementação

pass

class Zeppelin(Nave):

def mover(self, x0, x1, v):

"""

A partir da posição inicial e final e da velocidade

calcula o tempo da viagem

"""

d = x1 - x0

t = v * d

return t

class Hovercraft(Nave):

# Esta classe não implementa o método mover()

pass

z = Zeppelin()

# Objeto que não implementa o método abstrato

# Isso causa uma exceção TypeError

h = Hovercraft()

Saída:

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

Saved successfully!

Ooh no, something went wrong!