21.12.2022 Views

python_para_desenvolvedores_2ed

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

134 Metaclasses

Metaclasses

Em uma linguagem orientada a objeto aonde (quase) tudo são objetos e todo

o objeto tem uma classe, é natural que as classes também sejam tratadas como

objetos.

Metaclasse é uma classe cujas as instâncias são classes, sendo assim, a

metaclasse define o comportamento das classes derivadas a partir dela. Em

Python, a classe type é uma metaclasse e pode ser usada para criar novas

metaclasses.

Exemplo de metaclasse criada a partir de type:

# -*- coding: latin1 -*-

class Singleton(type):

"""

Metaclasse Singleton

"""

def __init__(cls, name, bases, dic):

type.__init__(cls, name, bases, dic)

# Retorna o próprio objeto na cópia

def __copy__(self):

return self

# Retorna o próprio objeto na cópia recursiva

def __deepcopy__(self, memo=None):

return self

cls.__copy__ = __copy__

cls.__deepcopy__ = __deepcopy__

def __call__(cls, *args, **kwargs):

# Chamada que cria novos objetos,

# aqui retorna sempre o mesmo

try:

return cls.__instance

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

Saved successfully!

Ooh no, something went wrong!