[Python]Problema al ejecutar metodo principal

Iniciado por Debci, 9 Septiembre 2010, 22:51 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

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 (python) [Seleccionar]
'''
Created on Sep 9, 2010

@author: Debci
'''
# -*- coding: utf-8 -*-
class Matrizes:
   #Nuestra querida matriz
   matriz = []
   def __init__(self):
       self.main()
   def main(self):
        while True:
            print "###### Manejo dinamico de matrizes ######\n\n"
            print "1-Insertar valores a la matriz"
            print "2-Examinar un elemento"
            print "3-Borrar un elemento"
            print "4-Modifica un elemento situado en un indice"
            print "5-Visualizar la matriz completa"
            print "6-Salir de esta aplicacion"
            indiceLeido = raw_input("Introduce tu opcion:")
            indiceLeido = int(indiceLeido)
            Matrizes.opcion(indiceLeido)
   
   
   def opcion(self,indice):
   
        #Comprobamos que indice es el introducido
        if indice == 1:
            numeroValores = raw_input("Cuantos valores desea introducir?\n")
            numeroValores = int(numeroValores)
            for i in range(numeroValores):
                valor = raw_input("Introduzca el valor asignado al indice " + str(i) + ":")
                valor = int(valor)
               
                Matrizes.matriz[i] = valor
        elif indice == 5:
            for j in Matrizes.matriz:
                print j
if __name__ == "__main__":
        Matrizes.main()


Y al ejecutar el interprete me devuelve el siguiente error:
CitarTraceback (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.

bizco

Matrizes tienes que instanciarla y no usarla tal cual:

var=Matrizes();

otra cosa, dentro de la clase usa self.

Novlucker

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

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Debci

Aqui os dejo el source con todo solucionado, para el que le interese:
Código (python) [Seleccionar]
'''
Created on Sep 9, 2010

@author: Debci
'''
# -*- coding: utf-8 -*-
import os, sys



class Matrizes:
   #Nuestra querida matriz
   matriz = []
   def __init__(self):
       self.main()
   def main(self):
        while True:
           
            #Empieza el muestreo del menu
            print "###### Manejo dinamico de matrizes ######\n\n"
            print "1-Insertar valores a la matriz"
            print "2-Examinar un elemento"
            print "3-Borrar un elemento"
            print "4-Modifica un elemento situado en un indice"
            print "5-Visualizar la matriz completa"
            print "6-Salir de esta aplicacion"
            indiceLeido = raw_input("Introduce tu opcion:\n")
            indiceLeido = int(indiceLeido)
            self.opcion(indiceLeido)
            #Limpiamos la pantalla
            #self.clearShell()
   
   def opcion(self,indice):
        matrizRelativa = []
        #Opcion 1
        if indice == 1:
            numeroValores = raw_input("Cuantos valores desea introducir?\n")
            numeroValores = int(numeroValores)
           
            for i in range(numeroValores):
                valor = raw_input("Introduzca el valor asignado al indice " + str(i) + ":\n")
                valor = int(valor)
                matrizRelativa.insert(i,valor)
            self.matriz = matrizRelativa
           
        #Opcion 2
        elif indice == 2:
            elemento = raw_input("Introduce el indice del objeto a analizar:")
            elemento = int(elemento)
            print self.matriz[elemento]
           
        #Opcion 5
        elif indice == 5:
            for j in self.matriz:
                print j
               
   def clearShell(self):
       os.system("clear")
       
if __name__ == "__main__":
    matrizes = Matrizes()
    matrizes.main()





Saludos