|
Página 1 de 2
|
De Nuevo Con Las Variables De Clase
Autor |
Mensaje |
Shell 
Analista Programador

Registrado: Marzo 2010
Mensajes: 5278
Edad: 52 Ubicación:  Al otro lado de la pantalla
|
 De Nuevo Con Las Variables De Clase
Buenos días!.
Voy a mostraros un ejemplo en el que usando una clase me da error y usando la misma clase con una leve variación, no.
Pero no logro del todo lo que quiero hacer.
Tengo la clase ContactoOld ( que es la errónea, o en la que lo hago mal ).
Estoy intentando averiguar los valores de las propiedades de los objetos de la clase añadidos a la variable de clase listacontactos.
Procedimiento para probar.
Public Sub UsandoClaseContactoOld()
Dim c1 As ContactoOld
c1 = New ContactoOld("Alberto", "alberto@gmail.com")
End
Salida en la consola:
Citar:
gbx3: warning: circular references detected:
gbx3: 1 ContactoOld
Ahora la variación de la clase. Esta vez uso en la misma clase un método estático que llamo desde el constructor
La llamada al procedimiento.
Citar:
2
(Class Contacto)
(String[] 0xb3a578)
(String[] 0xb3a578)
Son solo pruebas. Si ya me esta dando que contiene un array de string, con un bucle anidado se podría ver.
Ahora os muestro algo similar en Python. Prueba en la consola.
#!/usr/bin/env python3
class Contacto:
todos_contactos = []
def __init__(self, nombre, email):
self.nombre = nombre
self.email = email
Contacto.todos_contactos.append(self)
def main():
pass
if __name__=='__main__': main()
Si yo en gambas usara algo como esto, con la clase instanciada en el objeto c1.
Os pongo al lado, el error que da:
Print Contacto.listacontactos[0].nombre 'No es un objeto
Print c1.listacontactos[0].nombre ' Contacto.listacontactos es static.
Os adjunto el código en gambas. Mas parece que añadió una clase y no un objeto de clase.
Saludos
Descripción: |
|
 Descargar |
Nombre del archivo: |
VariableDeClase.tar.gz |
Tamaño: |
12.93 KB |
Descargado: |
54 veces |
Descripción: |
|
 Descargar |
Nombre del archivo: |
VariableDeClase.tar.gz |
Tamaño: |
12.93 KB |
Descargado: |
54 veces |
Descripción: |
|
 Descargar |
Nombre del archivo: |
VariableDeClase.tar.gz |
Tamaño: |
12.93 KB |
Descargado: |
54 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Sabado, 14 Enero 2017, 10:56; editado 1 vez
|
#1 Sabado, 14 Enero 2017, 10:52 |
|
 |
Shell 
Analista Programador

Registrado: Marzo 2010
Mensajes: 5278
Edad: 52 Ubicación:  Al otro lado de la pantalla
|
 Re: De Nuevo Con Las Variables De Clase
Si yo hiciera esto:
Puedo ver tanto las propiedades de la clase como parte de sus métodos.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#2 Sabado, 14 Enero 2017, 11:06 |
|
 |
Shell 
Analista Programador

Registrado: Marzo 2010
Mensajes: 5278
Edad: 52 Ubicación:  Al otro lado de la pantalla
|
 Re: De Nuevo Con Las Variables De Clase
Por cierto.
Class.Simbol aunque en la ayuda dice que da una "colección", mas que una colección es un array.
Citar:
Property Read Symbols As String[]
Returns a collection of all the symbol names of a class.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#3 Sabado, 14 Enero 2017, 11:28 |
|
 |
jsbsan 
Analista Programador

Registrado: Septiembre 2009
Mensajes: 4175
Edad: 50 Ubicación:  dos hermanas, sevilla
|
 Re: De Nuevo Con Las Variables De Clase
Shell:
El error en la clase ContactoOld:
Citar: gbx3: warning: circular references detected:
gbx3: 1 ContactoOld
Se produce cuando gambas3 intenta cerrar el programa, y creo que es porque gambas3 no puede borrar la clase ContactoOld (o algo que esta dentro de ella) ya que esta siendo usada por otra variable.. Parece que al usarla directamente en el constructor _new se produce ese enlace... Sin embargo cuando la usas llamando desde otro método (anade) , no se produce ese enlace.... es muy curioso
Si añades al código:
ContactoOld.listacontactos = Null
Esa referencia circular, queda "rota", y ya no muestra el mensaje de advertencia.
Te adjunto el código corregido....
Descripción: |
Con modificacion... |
 Descargar |
Nombre del archivo: |
VariableDeClase-0.0.2.tar.gz |
Tamaño: |
11.64 KB |
Descargado: |
61 veces |
Descripción: |
Con modificacion... |
 Descargar |
Nombre del archivo: |
VariableDeClase-0.0.2.tar.gz |
Tamaño: |
11.64 KB |
Descargado: |
61 veces |
Descripción: |
Con modificacion... |
 Descargar |
Nombre del archivo: |
VariableDeClase-0.0.2.tar.gz |
Tamaño: |
11.64 KB |
Descargado: |
61 veces |
|
#4 Sabado, 14 Enero 2017, 13:13 |
|
 |
vuott 
Analista Programador

Registrado: Agosto 2013
Mensajes: 2086
Edad: 59 Ubicación:
|
 Re: De Nuevo Con Las Variables De Clase
Si añades al código:
ContactoOld.listacontactos = Null
Esa referencia circular, queda "rota", y ya no muestra el mensaje de advertencia.
Óptima sugerencia.
Solo por mera curiosidad, es posible usar tambien la función externa " exit( )" de la libreria dinamica " libc.so.6".
En este caso la función externa debería ser declarada con Extern y ser puesta en lugar de la raya " ContactoOld.listacontactos = Null".
|
#5 Sabado, 14 Enero 2017, 15:23 |
|
 |
jguardon 
Administrador

Registrado: Septiembre 2009
Mensajes: 2708
Edad: 56 Ubicación:  Granada
|
 Re: De Nuevo Con Las Variables De Clase
Además, los accesos de lectura/escritura de las propiedades "email" y "nombre" deben de ser públicos.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#6 Sabado, 14 Enero 2017, 15:35 |
|
 |
Shell 
Analista Programador

Registrado: Marzo 2010
Mensajes: 5278
Edad: 52 Ubicación:  Al otro lado de la pantalla
|
 Re: De Nuevo Con Las Variables De Clase
Julio:
Gracias, ya funciona. No tenía ni idea de que se necesitase esa liberación final.
Debe ser algo propio de Gambas.
En consola nunca había visto este tipo de errores. Tengo otros ejemplos que tengo
que modificar ya que tienen el mismo problema usando estas clases.
Vuott:
Vaya, al final lo logré con ese método también.
Library "libc:6"
Extern exit() As Integer
Public Sub Main()
UsandoClaseContactoOld()
End
Public Sub UsandoClaseContactoOld()
Dim c1 As ContactoOld
c1 = New ContactoOld("Alberto", "alberto@gmail.com")
Print ContactoOld.listacontactos.Count
Print ContactoOld.listacontactos[0].nombre
exit()
'ContactoOld.listacontactos = Null
End
Se mezclaba el Exit() de gambas . Y es que es en minúscula. Y en vez de libc:6
estaba usando el nombre completo de la librería. Claro que en un Linux de 64b hay dos:
Citar:
./x86_64-linux-gnu/libc.so.6
./i386-linux-gnu/libc.so.6
Jesús:
Citar:
Además, los accesos de lectura/escritura de las propiedades "email" y "nombre" deben de ser públicos.
Son accesible con la propiedad. ¿ Qué más necesitas que eso ?.
En el código que he mostrado de Python son públicas, claro.
Por cierto, estos ejemplos que estoy haciendo en gambas son gracias al curso de Inicio práctico a la programación con Python 3.X,
de Jesús Conde.
Curso Inicio práctico a la programación con Python 3.X de Jesús Conde.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#7 Sabado, 14 Enero 2017, 19:32 |
|
 |
v3ctor 
Analista Programador

Registrado: May 2013
Mensajes: 1786
Edad: 43 Ubicación:  Uruguay
|
 Re: De Nuevo Con Las Variables De Clase
jajaj siempre explorando shell!!
estoy esperando algún programa hecho por vos!!
a ver si nos sorprendes heee, ya tenes mas que suficientes herramientas para comenzar!!
jajjajaj
saludos
/me porque aún shell no ha hecho ningún programa? (para los chateros jajajaj)
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#8 Domingo, 15 Enero 2017, 23:37 |
|
 |
Shell 
Analista Programador

Registrado: Marzo 2010
Mensajes: 5278
Edad: 52 Ubicación:  Al otro lado de la pantalla
|
 Re: De Nuevo Con Las Variables De Clase
v3ctor:
Citar:
me porque aún shell no ha hecho ningún programa? (para los chateros jajajaj)
Cierto. Nunca acabo haciendo una aplicación de un tamaño considerado.
Es que intento siempre estar viendo diferentes cosas y es que la programación
abarca mucho. Parece no tener fin.
Digamos que me gusta conocer cosas , pero no me acabo de decidir en que emplearlas.
Al igual que la programación modular, que esta formada por muchas partes, tengo que ir
tomando cada parte y crear un todo.
Cuando haces una aplicación grande requiere mucho tiempo y una gran dedicación.
A medida que avanzo y leo me van asaltando otros y otros ejemplos, ocurrencias
que intento cazar al vuelo, para que no se me olviden me tengo que poner con ellos.
De una misma idea, surgen otras y así recursivamente.
Me gusta los ejemplos pequeños, que demuestran cosas interesantes.
Como son pequeñas funciones.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#9 Lunes, 16 Enero 2017, 01:28 |
|
 |
v3ctor 
Analista Programador

Registrado: May 2013
Mensajes: 1786
Edad: 43 Ubicación:  Uruguay
|
 Re: De Nuevo Con Las Variables De Clase
pero shell no te enredes ni te ahogues en un vaso de agua.
la cosa es bien simple el programa se hace para solucionar un problema en concreto o hacer una tarea especifica.
si no programas nada tal vez no tengas la necesidad de resolver ningún problema o hacer alguna tarea importante.
así es como nacen los programas, ellos resuelven un problema en concreto.
para mi taller2015 por ejemplo me hace de ayudante administrativo jajjajaj.
saludos.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#10 Lunes, 16 Enero 2017, 16:19 |
|
 |
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|