Python - Iniciación Python: duda

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Iniciación Python: duda

Publicado por Sergio (2 intervenciones) el 10/10/2019 13:44:30
Hola! Estaba iniciándome por afición en el tema de la programación a través de Python y me ha surgido una duda con un curso que estaba haciendo:

El vídeo al que hago referencia es el siguiente:

Y el código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import pickle
 
class persona():
 
	def __init__ (self, nombre, genero, edad):
 
		self.nombre=nombre
		self.edad=edad
		self.genero=genero
 
		print ("Se ha creado una nueva persona: ", self.nombre)
 
	def __str__(self):
 
		cadena = self.nombre + ", " + self.genero + ", " + self.edad
 
		return cadena
 
 
class listapersonas():
 
	lista = []
 
	def __init__(self):
 
		archivoexterno = open ("archivopersonas", "ab+")
 
		archivoexterno.seek(0)
 
		try:
 
			self.lista = pickle.load(archivoexterno)
 
			print ("El archivo externo tiene {} personas en su interior".format(len(self.lista)))
 
		except:
 
			print ("El archivo está vacío")
 
		finally:
 
			archivoexterno.close()
 
			del archivoexterno
 
 
	def añadirpersonas(self, px):
 
		self.lista.append(px)
 
		self.volcarinformacionaarchivoexternopersonas()
 
	def mostrarlista (self):
 
		for p in self.lista:
 
			print (p)
 
	def volcarinformacionaarchivoexternopersonas(self):
 
		pepitolospalotes = open ("archivopersonas", "wb")
 
		pickle.dump(self.lista, pepitolospalotes)
 
		pepitolospalotes.close()
 
		del pepitolospalotes
 
 
	def mostrarexterno(self):
 
		for p in self.lista:
 
			print (p)
 
----------------------
 
milista=listapersonas()
 
px = persona("Juan", "masculino", "34")
 
milista.añadirpersonas(px)
 
milista.mostrarexterno()


La duda que tengo es: ¿Por qué es necesario a la hora de cargar el archivo poner el self.lista= pickle.load(archivoexterno)? Lo digo porque pensaba que se podía igualar a lo que fuese. Aquí, sin embargo, si no se iguala a self.lista no funciona. Yo pensaba que lo relevante es lo que se carga (archivoexterno) y que se supone que ahí ya estaba almacenada la información.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Iniciación Python: duda

Publicado por joel (901 intervenciones) el 10/10/2019 15:16:27
Si, eso es porque si no pones el self, que hace referencia al objeto, crearías una nueva variable en el interior de la función __init__ que solo tendría valor dentro de esa función, y fuera de esa función no se conocería la variable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Iniciación Python: duda

Publicado por Sergio (2 intervenciones) el 10/10/2019 15:30:58
Ah, vale. Es decir, si yo hubiese puesto self.prueba (en vez de self.lista) la variable self.prueba no estaría definida de ninguna manera, ¿no? Entonces no se produce el volcado de información de la lista al archivo externo, entiendo. Sin embargo, como después de la clase he dicho que lista = [], entonces sí puedo usar self.lista porque es una variable definida previamente, ¿no? Pero entonces, si defino otra variable, ¿podría igualar el pickle.load(archivoexterno) a esa otra variable?

¡Muchas gracias de todas formas por la primera respuesta! A ver si poco a poco me voy aclarando :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar