[pyar] getattr y similar para métodos de clase?

John Rowland Lenton john.lenton en canonical.com
Sab Jun 12 18:42:42 ART 2010


On Sat, Jun 12, 2010 at 11:21:08PM +0200, Juanjo Conti wrote:
> Cuando en una clase definimos __getattr__, el método es llamado cada vez que
> se pide a un objeto de esa clase un atributo, y este no existe.
> 
> Lo anterior permite que un objeto pueda responder en forma dinámica a la
> solicitud de atributos. Podemos hacer algo similar con las clases y sus
> métodos de clases?
> 
> A qué me refiero? Algo así:
> 
> class C:
>     # magic
> 
> >>> C.algo
> 'algo'

claro!

In [1]: class M(type):
   ...:     def __getattr__(self, attr):
   ...:         return 42
   ...:     
   ...: 

In [2]: class C(object):
   ...:     __metaclass__ = M
   ...: 

In [3]: C.foo
Out[3]: 42


si no te gusta la magia de __metaclass__, podés usar

  M('magic', (object,), {})

como superclase de C, en vez de object; es lo mismo. No estoy seguro
de que sea más claro :)

...

la conclusión de esto debería ser, una vez más, que la distinción
entre clases y objetos en python es como la distinción entre
electricidad y magnetismo: girá la cabeza un poquito y te das cuenta
de que son la misma cosa.
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100612/d741a2a7/attachment.sig>


More information about the pyar mailing list