comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[python] Objetos comparten atributo

  • 1 Respuestas
  • 782 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado $francisco

  • *
  • Underc0der
  • Mensajes: 191
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Skype: hackloper
« en: Abril 07, 2016, 05:35:34 pm »
Muy buenas de nuevo, la verdad no sabia que titulo poner pero es así en un caso que no se el porque, tan solo creo una clase y pongo un atributo que contiene una lista y al crear dos objetos de esa clase y actualizar la lista el otro objeto también cambia el atributo.

Código: Python
  1. class estructura:
  2.     _buffer = []
  3.     def __init__(self):
  4.         self.id = 0
  5.  
  6.     def set_buffer(self,data):
  7.         self._buffer.append(data)
  8.  
  9.     def get_buffer(self):
  10.         return self._buffer
  11.  
  12. q = estructura()
  13. q2 = estructura()
  14.  
  15. q.set_buffer('datos')
  16.  
  17. print q.get_buffer()
  18. print q2.get_buffer()

Simplemente es un ejemplo y si lo ejecutan los dos objetos tienen el atributo "_buffer" con el mismo valor y esto no deberia pasar al cambiar el valor de un atributo de un objeto no deberia afectar al otro pero tambien comprobé que esto cambia si hago lo siguiente.

Código: Python
  1. class estructura:
  2.     def __init__(self):
  3.         self.id = 0
  4.         self._buffer = []
  5.  
  6.     def set_buffer(self,data):
  7.         self._buffer.append(data)
  8.  
  9.     def get_buffer(self):
  10.         return self._buffer
  11.  
  12. q = estructura()
  13. q2 = estructura()
  14.  
  15. q.set_buffer('datos')
  16.  
  17. print q.get_buffer()
  18. print q2.get_buffer()

Si pongo el atributo "_buffer" dentro de el metodo "__init__" no comparte este atributo y tampoco pasa si el buffer es simplemente un "string" solo pasa si contiene una lista, tupla o diccionario ¿alguien sabe a que se debe?
« Última modificación: Abril 09, 2016, 12:45:13 pm por Expermicid »

Desconectado seth

  • *
  • Underc0der
  • Mensajes: 264
  • Actividad:
    0%
  • Reputación 2
    • Ver Perfil
« Respuesta #1 en: Abril 07, 2016, 11:35:50 pm »
En el primer caso buffer pertenece a la clase, no al metodo
Ni necesitas instanciar un objeto para acceder a buffer:
Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
>>> class a:
...     b=1
...
>>> a.b
1
>>> a.b=2
>>> a
<class __main__.a at 0x7f4e1e9d24c8>
>>> a.b
2


No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta

edit: yo siempre seteo los atributos en el init, aunque ahora me agarro la duda y no se si es la mejor practica
« Última modificación: Abril 09, 2016, 12:45:35 pm por Expermicid »

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] Correr paso a paso un Script de Python

Iniciado por Olger346

Respuestas: 2
Vistas: 686
Último mensaje Febrero 11, 2018, 10:36:44 am
por Olger346
[SOLUCIONADO] [Python] Error: "Expected an indented block"

Iniciado por Banfek

Respuestas: 3
Vistas: 1837
Último mensaje Abril 01, 2015, 05:58:13 pm
por Banfek
[SOLUCIONADO] ¿Algún curso, taller o libro sobre inteligencia artificial Python?

Iniciado por dolphin

Respuestas: 1
Vistas: 918
Último mensaje Septiembre 10, 2016, 03:39:20 pm
por blackdrake
[Python] ¿Alguna libreria para recuperar archivos eliminados de la papelera?

Iniciado por $francisco

Respuestas: 2
Vistas: 1454
Último mensaje Noviembre 05, 2018, 06:43:15 am
por alexcv
[SOLUCIONADO] Ayuda para comprender un poco Python, vengo de Java.

Iniciado por coke951

Respuestas: 3
Vistas: 1253
Último mensaje Enero 01, 2016, 06:16:24 pm
por coke951