Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Debci en 9 Septiembre 2010, 22:51 pm



Título: [Python]Problema al ejecutar metodo principal
Publicado por: Debci en 9 Septiembre 2010, 22:51 pm
Muy buenas noches a todos!
He estado codeando un pequeño ejercicio que se me ocurrió en Python y he decidido hacerlo con clases y orientado a objetos, el problema es que no soy capaz de llamar al metodo main(), os muestro el codigo que llevo hecho:

Código
  1. '''
  2. Created on Sep 9, 2010
  3.  
  4. @author: Debci
  5. '''
  6. # -*- coding: utf-8 -*-
  7. class Matrizes:
  8.   #Nuestra querida matriz
  9.   matriz = []
  10.   def __init__(self):
  11.       self.main()
  12.   def main(self):
  13.        while True:
  14.            print "###### Manejo dinamico de matrizes ######\n\n"
  15.            print "1-Insertar valores a la matriz"
  16.            print "2-Examinar un elemento"
  17.            print "3-Borrar un elemento"
  18.            print "4-Modifica un elemento situado en un indice"
  19.            print "5-Visualizar la matriz completa"
  20.            print "6-Salir de esta aplicacion"
  21.            indiceLeido = raw_input("Introduce tu opcion:")
  22.            indiceLeido = int(indiceLeido)
  23.            Matrizes.opcion(indiceLeido)
  24.  
  25.  
  26.   def opcion(self,indice):
  27.  
  28.        #Comprobamos que indice es el introducido
  29.        if indice == 1:
  30.            numeroValores = raw_input("Cuantos valores desea introducir?\n")
  31.            numeroValores = int(numeroValores)
  32.            for i in range(numeroValores):
  33.                valor = raw_input("Introduzca el valor asignado al indice " + str(i) + ":")
  34.                valor = int(valor)
  35.  
  36.                Matrizes.matriz[i] = valor
  37.        elif indice == 5:
  38.            for j in Matrizes.matriz:
  39.                print j
  40. if __name__ == "__main__":
  41.        Matrizes.main()

Y al ejecutar el interprete me devuelve el siguiente error:
Citar
Traceback (most recent call last):
  File "/home/debci/workspace/Tester/src/main.py", line 41, in <module>
    Matrizes.main(super)
TypeError: unbound method main() must be called with Matrizes instance as first argument (got type instance instead)

Que ocurre? No estoy seguro pero me daba como error que habia que indicar self como primer parametro, pero no acabo de ver porque falla...

Un saludo y gracias desde ya.


Título: Re: [Python]Problema al ejecutar metodo principal
Publicado por: bizco en 9 Septiembre 2010, 23:07 pm
Matrizes tienes que instanciarla y no usarla tal cual:

var=Matrizes();

otra cosa, dentro de la clase usa self.


Título: Re: [Python]Problema al ejecutar metodo principal
Publicado por: Novlucker en 10 Septiembre 2010, 02:51 am
Desde la clase no debes de llamar a la propia clase, sino que solo debes de llamar a las funciones. Con esto me refiero a que llames a las funciones por NombreFuncion(parametros), y no por NombreClase.NombreFuncion(parametros)

Saludos



Título: Re: [Python]Problema al ejecutar metodo principal
Publicado por: Debci en 10 Septiembre 2010, 17:15 pm
Aqui os dejo el source con todo solucionado, para el que le interese:
Código
  1. '''
  2. Created on Sep 9, 2010
  3.  
  4. @author: Debci
  5. '''
  6. # -*- coding: utf-8 -*-
  7. import os, sys
  8.  
  9.  
  10.  
  11. class Matrizes:
  12.   #Nuestra querida matriz
  13.   matriz = []
  14.   def __init__(self):
  15.       self.main()
  16.   def main(self):
  17.        while True:
  18.  
  19.            #Empieza el muestreo del menu
  20.            print "###### Manejo dinamico de matrizes ######\n\n"
  21.            print "1-Insertar valores a la matriz"
  22.            print "2-Examinar un elemento"
  23.            print "3-Borrar un elemento"
  24.            print "4-Modifica un elemento situado en un indice"
  25.            print "5-Visualizar la matriz completa"
  26.            print "6-Salir de esta aplicacion"
  27.            indiceLeido = raw_input("Introduce tu opcion:\n")
  28.            indiceLeido = int(indiceLeido)
  29.            self.opcion(indiceLeido)
  30.            #Limpiamos la pantalla
  31.            #self.clearShell()
  32.  
  33.   def opcion(self,indice):
  34.        matrizRelativa = []
  35.        #Opcion 1
  36.        if indice == 1:
  37.            numeroValores = raw_input("Cuantos valores desea introducir?\n")
  38.            numeroValores = int(numeroValores)
  39.  
  40.            for i in range(numeroValores):
  41.                valor = raw_input("Introduzca el valor asignado al indice " + str(i) + ":\n")
  42.                valor = int(valor)
  43.                matrizRelativa.insert(i,valor)
  44.            self.matriz = matrizRelativa
  45.  
  46.        #Opcion 2
  47.        elif indice == 2:
  48.            elemento = raw_input("Introduce el indice del objeto a analizar:")
  49.            elemento = int(elemento)
  50.            print self.matriz[elemento]
  51.  
  52.        #Opcion 5
  53.        elif indice == 5:
  54.            for j in self.matriz:
  55.                print j
  56.  
  57.   def clearShell(self):
  58.       os.system("clear")
  59.  
  60. if __name__ == "__main__":
  61.    matrizes = Matrizes()
  62.    matrizes.main()




Saludos