[Python-es] es posible convertir __setattr__ en un staticmethod?

Chema Cortes pych3m4 en gmail.com
Lun Feb 28 14:23:50 CET 2011


El día 28 de febrero de 2011 13:05, Jose Caballero
<jcaballero.hep en gmail.com> escribió:
> Pero fíjate que yo quiero hacer más cosas y no solo asignar un valor a la variable. En el ejemplo que puse hago un print. También quiero hacer validación de los valores. Por eso necesito una función/método. Y había pensado en __setattr__

Hablando en modo bastante "esotérico", siempre que quieras controlar
la asignación dinámica de atributos de una instancia se debe emplear
"descriptores". Como lo que queremos controlar son atributos de clase
más que de instancia, deberemos un nivel de abstracción para pasar a
trabajar con "metaclases".

En la práctica:

class myclass(object):
    class __metaclass__(type):
        def __setattr__(cls, key, value):
            type.__setattr__(cls, key, value)
            print 'passing key %s with value %s' %(key, value)

myclass.x = 1
myclass.y = 2


Más información sobre la lista de distribución Python-es