meta classes em python

Outro dia precisei fazer com que itens de um dicionário se tornassem atributos de uma classe. Sempre vi isso nos frameworks tipo Django, Turbogears, WebPy e etc. Aí, usando introspecção fiz um loop pelos itens do dicionário e usando setattr criei os atributos da classe com seus respectivos valores.

Esse esquema é trabalhoso, manual, e tosco. Procurando um pouco, encontrei uma função que fazia algo semelhante a essa que escrevi, e que já é padrão no Python.

Veja só:

$ python
Python 2.5.1 (r251:54863, Mar  7 2008, 03:39:23) 
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from new import classobj
>>> class ZZ: pass
... 
>>> oo = classobj('myobj', (ZZ,), dict(aa=True, bb=False, tt='woah!'))
>>> dir(oo)
['__doc__', '__module__', 'aa', 'bb', 'tt']
>>> oo.aa
True
>>> oo.tt
'woah!'

Agora, posso transformar qualquer conteúdo de dicionário em atributos de um objeto. Usando classobj posso ainda fornecer uma classe base (no exemplo, ZZ) com outros métodos pré-definidos.

Vários outros exemplos estão disponíveis neste link.

Anúncios

One Comment on “meta classes em python”

  1. […] dicionários com chaves e atributos 10 10 2008 Já postei um artigo semelhante a esse, relacionado a meta classes em python. Dessa vez, fui mais longe e acabei fazendo uma […]


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s