Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Atributo Estático De Clase
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Atributo Estático De Clase 
 
Buenas!.

Tengo este ejemplo:

La clase Cosa:

Static Public total As Integer

Public Sub _new()
  
  total += 1
  
End

Static Public Sub MostrarTotal()
  
  Print Subst("El total de objetos Cosa creados es de: &1", Cosa.total)
  
End
 


Y Main contiene:
Public Sub Main()

 Dim objeto As Cosa
 
 'No se crea ningun objeto
 'Se muestra el valor del atributo total de la clase Cosa
  Print Subst("El valor del atributo total de la clase Cosa es &1 ", Cosa.total)
 
 objeto = New Cosa
 objeto.MostrarTotal()
 
 'Se intenta acceder al atributo total de la clase Cosa a traves de un objeto
 Print objeto.total

End

 


Bien, me gustaría saber, ¿ por qué se produce error ?.
He estado viendo un poco el tratamiento de los objetos en la ayuda de gambas.

La salida fue esta:

Citar:

El valor del atributo total de la clase Cosa es 0
El total de objetos Cosa creados es de: 1


Y al intentar mostrar el valor del atributo de clase mediante un objeto instanciado de la clase Cosa, me da este error:

Citar:

Cosa.total es static


¿ No debería haber mostrado el valor del atributo/símbolo ?.
En Python no me he encontrado ese problema. Este es un código similar para Python.

#!/usr/bin/python3

class Cosa():

    total = 0

    @staticmethod
    def MostrarTotal():
        print ('El total de objetos Cosa creados es de: {0}'.format(Cosa.total))

    def __init__(self):
        Cosa.total += 1

def main():
    # No se crea ningún objeto
    # Se muestra el valor del atributo total de la clase Cosa
    print ('El valor del atributo total de la clase Cosa es: {0}'.format(Cosa.total))

    objeto = Cosa()
    objeto.MostrarTotal()

    # Se intenta accede al atributo total de la clase Cosa a través de un objeto
    print (objeto.total)

if __name__=='__main__': main()
 


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
Citar:
el valor del atributo de clase

¿Eso qué es lo que es? (en serio)...    
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
Shordi:

Citar:

¿Eso qué es lo que es? (en serio)


Es una variable de la clase. En este caso es estática.
Es como la llamaron en un libro de Python. Atributo/Variable/Símbolo, parece lo mismo.

En Python es un variable pública que se declara antes del constructor.
En gambas tenemos _new, en Python es __init__

Es solo eso. No hay tanta diferencia con gambas,  salvo la jerga.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
Shell,

en tu código pones:

Print objeto.total
 


Y eso te da el error 'Cosa.total es Static' ya que como 'Static' es un tipo de variable al que se accede sin instanciar el objeto, llamándolo directamente con el nombre de la clase.

¿Eso es lo que preguntas?

Saludos....
 



 
vicr - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
vicr escribió: [Ver mensaje]
....sin instanciar el objeto, llamándolo directamente con el nombre de la clase.


Bravo vicr.  sisi

 ...y no puede poner total += 1 en Public Sub _new() .
 



 
última edición por vuott el Sabado, 08 Octobre 2016, 16:12; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
Citar:

Es una variable de la clase. En este caso es estática.

No entiendo nada. De una clase puedes tener una instancia, pero no una variable, que yo sepa.
En gambas, hasta donde yo controlo, si declaras una variable sin dar valor, sea del tipo que sea, es un valor null o el equivalente vacío del tipo.
Por eso  
dim objeto as cosa
print cosa.total
 

No tiene sentido.

Citar:
En Python es un variable pública que se declara antes del constructor.
En gambas tenemos _new, en Python es __init__

Sin constructor no hay instanciación, por lo que no puede haber valor... Antes de _new no hubo antes, que decía la canción...
O te explicas mejor o es que yo estoy empanao...   
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
vicr:

Citar:

Y eso te da el error 'Cosa.total es Static' ya que como 'Static' es un tipo de variable al que se accede sin instanciar el objeto, llamándolo directamente con el nombre de la clase.

¿Eso es lo que preguntas?


Eso es. Correcto!.
Estas cosa deberían explicarse mejor en los libros cuando se ponen los ejemplos. La forma correcta, las distintas formas de acceder propias
de cada lenguaje y la que debería ser la más estándar dentro de la POO.

Vuott:

Citar:

...y no puede poner total += 1 en Public Sub _new() .


Pues yo no lo veo tan raro. A la hora de crear el objeto se añade uno más a la variable de clase total.
A ver,  ¿ por que crees que no se puede poner eso ?. No es una variable de instancia.

"Uomo di poca fede."  

Shordi:

Si, no tiene sentido por que una variable estática dentro de una clase se accede sin instanciar la clase.

Citar:

Sin constructor no hay instanciación, por lo que no puede haber valor... Antes de _new no hubo antes, que decía la canción...
O te explicas mejor o es que yo estoy empanao..


No, simplemente es que son dos lenguajes distintos. Es que no hay instanciación.
En Python una variable fuera de los métodos de una clase, es una variable de clase.
Son las variables que están fuera de una instancia.

La sentencia de asignación es ejecutada solo una vez, cuando Python primero ve la definición de la clase.
Esto significa que la variable existe antes de que un solo objeto es creado. Así que
tu puedes usar una variable de clase sin que exista ninguna instancia de objeto.
 
¿ A caso en gambas no puedes acceder a una variable de esta forma ?.

modulo.variable


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Atributo Estático De Clase 
 
Vuott:

Este fue otro ejemplo con static que hice hace tiempo.

Jugando con static

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿Campo Mysql Con Atributo Auto_increment ... soplo Bases de Datos 3 Domingo, 25 Octobre 2009, 21:13 Ver último mensaje
soplo
No hay nuevos mensajes Ejemplo De Clase Publica Y Clase Privada Shell Aplicaciones/Fragmentos de Código 2 Martes, 28 May 2013, 11:41 Ver último mensaje
shordi
No hay nuevos mensajes ¿ Es La Clase Padre Una Clase Abstracta ? Shell General 3 Viernes, 04 Julio 2014, 08:58 Ver último mensaje
jsbsan
No hay nuevos mensajes Clase Audio Y Clase Configuracion De Audio... v3ctor Aplicaciones/Fragmentos de Código 3 Jueves, 08 Octobre 2015, 08:35 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron