Pregunta TypeError: falta 1 argumento posicional requerido: 'self'


Soy nuevo en Python y he chocado contra una pared. Seguí varios tutoriales pero no puedo pasar el error:

Traceback (most recent call last):
  File "C:\Users\Dom\Desktop\test\test.py", line 7, in <module>
    p = Pump.getPumps()
TypeError: getPumps() missing 1 required positional argument: 'self'

Examiné varios tutoriales pero no parece haber nada diferente de mi código. Lo único que se me ocurre es que Python 3.3 requiere una sintaxis diferente.

scipt principal:

# test script

from lib.pump import Pump

print ("THIS IS A TEST OF PYTHON") # this prints

p = Pump.getPumps()

print (p)

Clase de bomba:

import pymysql

class Pump:

    def __init__(self):
        print ("init") # never prints


    def getPumps(self):
                # Open database connection
                # some stuff here that never gets executed because of error

Si entiendo correctamente, "self" se pasa automáticamente al constructor y a los métodos. ¿Qué estoy haciendo mal aquí?

Estoy usando Windows 8 con Python 3.3.2


74
2017-07-08 19:21


origen


Respuestas:


Necesita crear una instancia de clase aquí.

Utilizar

p = Pump()
p.getPumps()

Pequeño ejemplo

>>> class TestClass:
        def __init__(self):
            print "in init"
        def testFunc(self):
            print "in Test Func"


>>> testInstance = TestClass()
in init
>>> testInstance.testFunc()
in Test Func

108
2017-07-08 19:23



Primero debe inicializarlo:

p = Pump().getPumps()

28
2017-07-08 19:23



También puede obtener este error tomando prematuramente el consejo de PyCharm para anotar un método @staticmethod. Eliminar la anotación


1
2017-12-03 15:58



Tuve un problema similar. Una parte de mi código se veía así:

class player(object):
    def update(self):
        if self.score == game.level:
            game.level_up()

class game(object):
    def level_up(self):
        self.level += 1

También me dio ese error sobre la pérdida self. Lo resolví escribiendo game.level_up(game) en lugar de game.level_up().

Debería funcionar para ti también.


-1
2018-05-30 08:50