TypeError:缺少1个必需的位置参数:'self'

时间:2013-07-08 19:21:42

标签: python python-3.x

我是蟒蛇新手,已经撞墙了。我遵循了几个教程,但无法克服错误:

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需要不同的语法。

主要内容:

# test script

from lib.pump import Pump

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

p = Pump.getPumps()

print (p)

泵类:

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”会自动传递给构造函数和方法。我在这里做错了什么?

我正在使用带有python 3.3.2的Windows 8

6 个答案:

答案 0 :(得分:165)

您需要在此实例化一个类实例。

使用

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

答案 1 :(得分:35)

您需要先将其初始化:

p = Pump().getPumps()

答案 2 :(得分:2)

你也可以通过过早地接受PyCharm的建议来注释方法@staticmethod来解决这个错误。删除注释。

答案 3 :(得分:2)

有效并且比我在这里看到的所有其他解决方案更简单:

Pump().getPumps()

如果您不需要重用类实例,那么这很好。在Python 3.7.3上进行了测试。

答案 4 :(得分:1)

python中的'self'关键字类似于c ++ / java / c#中的'this'关键字。

在python 2中,它是由编译器cd "C:\Users\suresh.padmanabhan\eclipse-workspace\ProtractorTutorials\Protractor Tests1" npm install protractor .\node_modules\.bin\webdriver-manager update .\node_modules\.bin\protractor conf.js 隐式完成的。 只是在python 3中,您需要在构造函数和成员函数中提及它(yes python does compilation internally)。例如:

explicitly

答案 5 :(得分:0)

您可以调用pump.getPumps()之类的方法。通过在方法上添加@classmethod装饰器。类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。

class Pump:

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

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

因此,只需致电Pump.getPumps()即可。

在Java中,它被称为static方法。