<div class="gmail_quote">On Wed, Nov 30, 2011 at 10:23 AM, David Roguin <span dir="ltr"><<a href="mailto:nesdavid@gmail.com">nesdavid@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Buenas!<br>
<br>
Hay alguna manera de crear clases anónimas?<br>
<br>
O sea, en Javascript yo puedo hacer:<br>
var a = {}<br>
Y eso ya me da un objeto al cual le puedo agregar lo que sea.<br>
<br>
Cual sería la manera de hacer eso en python?<br>
Lo que se me ocurrió es esto:<br>
class A:<br>
  pass<br>
a = A()<br>
<br>
Pero 3 lineas de código es mucho :)<br>
<br>
Saludos!<br>
<span class="HOEnZb"><font color="#888888">--<br>
David<br>
<br>
<br>
<br>
_______________________________________________<br>
pyar mailing list <a href="mailto:pyar@python.org.ar">pyar@python.org.ar</a><br>
<a href="http://listas.python.org.ar/listinfo/pyar" target="_blank">http://listas.python.org.ar/listinfo/pyar</a><br>
<br>
PyAr - Python Argentina - Sitio web: <a href="http://www.python.org.ar/" target="_blank">http://www.python.org.ar/</a><br>
<br>
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - <a href="http://www.usla.org.ar" target="_blank">http://www.usla.org.ar</a><br>
</font></span></blockquote></div><br><br clear="all"><div>Buenas,</div><div><br></div><div>Algunas aclaraciones, tu codigo en JS esta creando un objeto vacio, no una clase anonima.</div><div><br></div><div>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:</div>
<div><br></div><div>a = {} o a = dict()</div><div><br></div><div>Y despues agregar los atributos como key/value y las funciones tmb como key/value.</div><div><br></div><div>Obviamente de esa forma no podes replicar el comportamiento de JS ni el comportamiento de una clase de python.</div>
<div><br></div><div>Sino tenes que crearte vos una clase para usarla como si fuera un objeto JS.</div><div><br></div><div>ej:</div><div><span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">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)
</code></pre></span><span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">    def __getitem__(self, name):
        return self.__dict__.get(name, None)</code></pre></span><span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">    def __setattr__(self, name, val):
        return self.__setitem__(name, val)<br></code></pre></span><span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">    def __getattr__(self, name):
        return self.__getitem__(name)</code></pre></span><span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">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.</code></pre>
<pre style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; white-space: pre; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: block; word-wrap: break-word; ">
<code class="python" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; font: normal normal normal 1em/normal Monaco, 'lucida console', monospace; line-height: 1.5; display: inline; ">Saludos,</code></pre>
</span></div>-- <br><div>Lucas</div><div> </div><br>