关于python:typeerror:缺少1个必需的位置参数:”self”

TypeError: Missing 1 required positional argument: 'self'

我是Python的新手,撞到了墙上。我学习了一些教程,但无法克服这个错误:

1
2
3
4
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'

我学习了一些教程,但似乎没有什么不同于我的代码。我唯一能想到的是,Python3.3需要不同的语法。

主要目录:

1
2
3
4
5
6
7
8
9
# test script

from lib.pump import Pump

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

p = Pump.getPumps()

print (p)

泵类:

1
2
3
4
5
6
7
8
9
10
11
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

如果我正确理解,"self"将自动传递给构造函数和方法。我在这里做错什么了?

我将Windows8与Python3.3.2结合使用


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

使用

1
2
p = Pump()
p.getPumps()

小例子

1
2
3
4
5
6
7
8
9
10
11
>>> class TestClass:
        def __init__(self):
            print("in init")
        def testFunc(self):
            print("in Test Func")


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


您需要先初始化它:

1
p = Pump().getPumps()


您还可以通过过早地接受Pycharm的建议来注释方法@staticmethod来获得此错误。删除注释。


Python中的"自我"关键字类似于C++中的"这个"关键字。

在python 2中,它是由编译器(yes python does compilation internally)隐式完成的。只是在python 3中,您需要在构造函数和成员函数中提到它explicitly。例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 class Pump():
 //member variable
 account_holder
 balance_amount

   // constructor
   def __init__(self,ah,bal):
   |    self.account_holder = ah
   |    self.balance_amount = bal

   def getPumps(self):
   |    print("The details of your account are:"+self.account_number + self.balance_amount)

 //object = class(*passing values to constructor*)
 p = Pump("Tahir",12000)
 p.getPumps()

我也有类似的问题。我的一段代码如下:

1
2
3
4
5
6
7
8
class player(object):
    def update(self):
        if self.score == game.level:
            game.level_up()

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

它也给了我关于丢失self的错误。我通过输入game.level_up(game)而不是game.level_up()来解决这个问题。

它也应该对你有用,但我不确定这是否是建议的方法。