[pyar] Clase que encapsula un atributo

Ariel Gerardo Ríos arielgerardorios en gmail.com
Mar Abr 22 15:40:53 ART 2014


Yo seguiría por el lado de la solución de Luis: las instancias creadas en
otros lados podrían tener un método que resetee el valor de parent para que
se acomoden al nuevo entorno:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


class A():
    def __init__(self, parent=None):
        self.set_parent(parent)

    def set_parent(self, parent):
        self.parent = parent

    def get_parent(self):
        return self.parent


class B():
    def __init__(self):
        self.a = A(self.__class__)


class C:
    def __init__(self, a):
        self.a = a
        self.a.set_parent(self.__class__)


if __name__ == '__main__':
    b = B()
    print b.a.get_parent()

    c = C(b.a)
    print c.a.get_parent()


    Ejecutándolo tenés:

$ python test.py
__main__.B
__main__.C


    Pero todo depende de qué tanto acceso tengas a la definición de las
clases para poder agregarles este método "set_parent()"

Saludos.


2014-04-22 15:18 GMT-03:00 Angel Java Lopez <ajlopez2000 en gmail.com>:

> Pero cuando instancia A puede estar afuera de B, pasarse la instancia al
> constructor de B, y asignarle la instancia al atributo foo de A
>
> class B(a)
>     foo = a
>
> y en algun lado
>
> B(A())
>
> Disculpen, no se si esta bien escrito en Python, espero que se entienda la
> idea: la instancia de A puede ser creada en el otro lado de la  luna, y
> terminar en un atributo de una instancia de B
>
>
> 2014-04-22 15:14 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar>:
>
>>  On 22/04/14 15:08, Angel Java Lopez wrote:
>>
>> En principio no, porque un metodo de instancia SOLO conoce la instancia,
>> no los atributos desde donde la instancia esta referenciada.
>>
>>  Una misma instancia podria estar referenciada desde quichicientos
>> atributos, en michicientas clases. Cual seria el resultado que esperarias
>> entonces en tu caso de uso?
>>
>>  Algun "workaround"?
>>
>>  Angel "Java" Lopez
>> @ajlopez
>>
>>
>> 2014-04-22 15:05 GMT-03:00 Emiliano Reynares <reynares.emiliano en gmail.com
>> >:
>>
>>> Seguramente con un ejemplo se entienda mejor mi consulta:
>>>
>>>  class A():
>>>     pass
>>>
>>>  class B():
>>>     foo = A()
>>>
>>>  Dado esta estructura de clases, quisiera conocer desde un método de la
>>> instancia 'foo' el nombre de la clase que la tiene como atributo (que en
>>> este caso sería B). Alguna sugerencia?
>>>
>>
>> Podés hacer alguna chanchada ...
>>
>> Por ejemplo, podrías usar el módulo traceback para poder inspeccionar el
>> frame "superior" en el stack y eso te diría, cuando instanciás A, que estas
>> en B, y A.__init__ podría guardar esa data en alguna parte.
>>
>> Ejemplo:
>>
>> >>> import traceback
>> >>> help(traceback)
>>
>> >>> traceback.print_stack()
>>   File "<stdin>", line 1, in <module>
>> >>> class A:
>> ...     def __init__(self):
>> ...         traceback.print_stack()
>> ...
>> >>> class B:
>> ...     a = A()
>> ...
>>   File "<stdin>", line 1, in <module>
>>   File "<stdin>", line 2, in B
>>   File "<stdin>", line 3, in __init__
>>
>>
>> Asi que algo usando eso y el módulo inspect probablemente puedas hacer
>> eso. Igual... PORQUEEEEEEEEE? ;-)
>>
>> _______________________________________________
>> 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
>>
>
>
> _______________________________________________
> 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
>



-- 
Ariel Gerardo Ríos
linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
<http://www.ariel17.com.ar>*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140422/6d38775d/attachment.html>


More information about the pyar mailing list