0

Estoy haciendo un código y me pasa esto:

Primero hice esta clase con intención de usarla como si fuera una estructura de las de C y C++

class Data:
  titulo = []
  id = []
  fecha=[]

Luego hice una función donde le di valores a los miembros

def funcion1():    

 vd = Data()

 #aquí va algo de código pero no es relevante

 vd.id.append(id)
 vd.titulo.append(title)      
 vd.fecha.append(date)

Luego hice otra función que nada tiene ver con la primera y que queria usar otra vez un objeto del tipo Data() (objeto diferente).

def funcion2():

 vdn = Data()

 #aquí va algo de código pero no es relevante

 for k in range( len(vdn.id) ):
  print("%s" % vdn.titulo[k])

El asunto es que me está pasando algo que no me esperaba y que no me interesa. En la funcion2(), vdn esta tomando los valores que le di a vd en la función1(). Es decir, se está comportando como una variable global, incluso dandole un nombre diferente.

¿Hay alguna forma de evitar que pase esto? Me interesan usar solo variables locales.

Pikoh
  • 17,305
  • 9
  • 38
  • 54
Iván Rodríguez
  • 1,299
  • 2
  • 12
  • 27
  • 2
    Son **atributos de clase** y son compartidos por todas las instancias de la clase no **atributos de instancia** propios de cada instancia. Define los atributos en el método `__init__` para que cada instancia tenga los suyos. Mírate esta pregunta y sus respuestas para entender la diferencia: [Diferencia entre atributos de instancia y atributos de clase](https://es.stackoverflow.com/q/132561/15089), en principio podría considerarse un duplicado. Un saludo. – FJSevilla Jun 18 '18 at 15:37
  • 1
    Básicamente sería : `class Data: def __init__(self): self.titulo=[]; self.id=[]; self.fecha=[]`. – FJSevilla Jun 18 '18 at 15:43
  • Gracias @FJSevilla!! Eso resolvió el problema!! – Iván Rodríguez Jun 18 '18 at 15:46

0 Answers0