我是蟒蛇新手,已经撞墙了。我遵循了几个教程,但无法克服错误:
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
答案 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
方法。