Que hace el self

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Dom Mayo 11 17:23:59 CEST 2008


El día 11 de mayo de 2008 10:17, kalith kalith <kalith.9 en gmail.com> escribió:
> Bueno estoy muy nuevo en esto de la poo nunca antes lo habia hecho aun se me
> dificultan muchos en realidad que es lo que hace el self...??
>
> teniendo el siguiente ejemplo:
>
>>>> class F:
> ...     i = 5
> ...     def dime_i(self):
> ...             return F.i
> ...     def dime_mi_i(self):
> ...             return self.i
>>>> a = F()
>>>> a.dime_i()
> 5
>>>> a.dime_mi_i()
> 5
>>>> a.i = 6

aca lo que estas haciendo es creando un atributo a la instancia a de
la clase F...fijate que es importante entender que este atributo i no
existe en tu instancia a, esto es lo lindo de python...

>>>> a.dime_i()
> 5

claro esto esta bien porque no estas imprimiento el atributo i de la
instancia a sino que estas imprimiendo el i de la clase

>>>> a.dime_mi_i()
> 6

mira si tu haces a.dime_mi_i() antes de haber hecho la asignacion
a.i=6 python hubiera impreso 5...ve este ejemplo:

>>> class F:
...     a = 1
...     def __init__(self):
...             self.b = 5
...     def impresion(self):
...             print self.a
...
>>> f = F()
>>> f.impresion()
1
>>> f.a
1
>>> f.__dict__
{'b': 5}
>>> f.a = 5
>>> f.impresion()
5
>>> f.__dict__
{'a': 5, 'b': 5}
>>> F.__dict__
{'a': 1, '__module__': '__main__', 'impresion': <function impresion at
0x828ddf4>, '__doc__': None, '__init__': <function __init__ at
0x828de64>}
>>>


basicamente porque python cuando le pides un atributo busca en el
diccionario local de la instancia y si no lo encuentra busca en el
diccionario local de la clase y si no lo encuentro busca en el
diccionario local de la(s) superclase(s)...y bueno si no lo encuentra
en ninguna de estas partes lanza una exception de
attributeError...creo que es bueno que leas esto [1]


[1] http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html

>>>> a.i
> 6

basicamente si miras este ejemplo:

>>> class F:
...     a = 1
...     def __init__(self):
...             self.a = 5
...
>>> F.__dict__
{'a': 1, '__module__': '__main__', '__doc__': None, '__init__':
<function __init__ at 0xb7d73374>}
>>> f = F()
>>> f.__dict__
{'a': 5}
>>>


>
>
>
> porque el que cambia es
>
> a.dime_mi_i()
> Gracias =)

porque en este estas imprimiendo un atributo de la instancia...si te
fijas cada objeto que te muestro anteriormente tiene un diccionario
{no todos los objetos python lo tienen} y si te das cuenta los
diccionarios de la instancia de la clase con el de la clase son
distintos.

Explicarte formalmente que es lo que sucede no lo se...quizas los mas
expertos puedan ayudar a profundizar mas mi explicacion.


saludos y espero haberte ayudado en algo,
>
> --
>
> Seamos realistas y hagamos lo imposible
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



-- 
Milton Inostroza Aguilera
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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