[pyar] clases anonimas

Lucas rollbak en gmail.com
Mie Nov 30 11:01:25 ART 2011


On Wed, Nov 30, 2011 at 10:23 AM, David Roguin <nesdavid en gmail.com> wrote:

> Buenas!
>
> Hay alguna manera de crear clases anónimas?
>
> O sea, en Javascript yo puedo hacer:
> var a = {}
> Y eso ya me da un objeto al cual le puedo agregar lo que sea.
>
> Cual sería la manera de hacer eso en python?
> Lo que se me ocurrió es esto:
> class A:
>  pass
> a = A()
>
> Pero 3 lineas de código es mucho :)
>
> Saludos!
> --
> David
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>


Buenas,

Algunas aclaraciones, tu codigo en JS esta creando un objeto vacio, no una
clase anonima.

Ahora con respecto a lo que preguntas, en python no existe tal cosa como
objeto vacio y sin tipo, pero teniendo en cuenta que los objetos en JS son
muy parecidos a los dict de python podrias hacer:

a = {} o a = dict()

Y despues agregar los atributos como key/value y las funciones tmb como
key/value.

Obviamente de esa forma no podes replicar el comportamiento de JS ni el
comportamiento de una clase de python.

Sino tenes que crearte vos una clase para usarla como si fuera un objeto JS.

ej:

class A(object):
    def __init__(self, *args, **kwargs):
        for arg in args:
            self.__dict__.update(arg)
        self.__dict__.update(kwargs)

    def __setitem__(self, name, val):
        return self.__dict__.__setitem__(name, val)

    def __getitem__(self, name):
        return self.__dict__.get(name, None)

    def __setattr__(self, name, val):
        return self.__setitem__(name, val)

    def __getattr__(self, name):
        return self.__getitem__(name)

Eso te dejaria usar el objeto como si fuera un dict y ademas como una
instancia de una clase python. Probablemente tengas que implementar
algun metodo especial mas para poder usarlo como cualquier otra clase
de python, pero con eso deberias poder hacer lo basico.

Saludos,

-- 
Lucas
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111130/34b056ea/attachment.html>


More information about the pyar mailing list