我无法通过错误:

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'

我检查了几个教程,但似乎与我的代码没有任何不同。我唯一能想到的是Python 3.3需要不同的语法。

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
        pass  # dummy code

p = Pump.getPumps()

print(p)

如果我理解正确,self会自动传递给构造函数和方法。我哪里做错了?


当前回答

我得到了同样的错误如下:

test()缺少一个必需的位置参数:'self'

当一个实例方法有self时,我直接通过类名调用它,如下所示:

class Person:
    def test(self): # <- With "self" 
        print("Test")

Person.test() # Here

并且,当一个静态方法有self时,我通过对象或直接通过类名调用它,如下所示:

class Person:
    @staticmethod
    def test(self): # <- With "self" 
        print("Test")

obj = Person()
obj.test() # Here

# Or

Person.test() # Here

所以,我用object调用实例方法,如下所示:

class Person:
    def test(self): # <- With "self" 
        print("Test")

obj = Person()
obj.test() # Here

并且,我从静态方法中删除了self,如下所示:

class Person:
    @staticmethod
    def test(): # <- "self" removed 
        print("Test")

obj = Person()
obj.test() # Here

# Or

Person.test() # Here

然后,错误得到了解决:

Test

详细地,我在回答什么是Python中的“实例方法”时解释了实例方法。并在我回答Python中的@classmethod vs @staticmethod时解释@staticmethod和@classmethod。

其他回答

如果跳过对象声明的括号(错别字),则会发生此错误。

# WRONG! will result in TypeError: getPumps() missing 1 required positional argument: 'self'
p = Pump
p.getPumps()

不要忘记泵对象的括号

# CORRECT!
p = Pump()
p.getPumps()

您需要在这里实例化一个类实例。

Use

p = Pump()
p.getPumps()

小例子:

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


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

你需要先初始化它:

p = Pump().getPumps()

我得到了同样的错误如下:

test()缺少一个必需的位置参数:'self'

当一个实例方法有self时,我直接通过类名调用它,如下所示:

class Person:
    def test(self): # <- With "self" 
        print("Test")

Person.test() # Here

并且,当一个静态方法有self时,我通过对象或直接通过类名调用它,如下所示:

class Person:
    @staticmethod
    def test(self): # <- With "self" 
        print("Test")

obj = Person()
obj.test() # Here

# Or

Person.test() # Here

所以,我用object调用实例方法,如下所示:

class Person:
    def test(self): # <- With "self" 
        print("Test")

obj = Person()
obj.test() # Here

并且,我从静态方法中删除了self,如下所示:

class Person:
    @staticmethod
    def test(): # <- "self" removed 
        print("Test")

obj = Person()
obj.test() # Here

# Or

Person.test() # Here

然后,错误得到了解决:

Test

详细地,我在回答什么是Python中的“实例方法”时解释了实例方法。并在我回答Python中的@classmethod vs @staticmethod时解释@staticmethod和@classmethod。

您也可以通过过早地接受PyCharm的建议来注释一个方法@staticmethod来得到这个错误。删除注释。