我无法忽略这个错误:
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
会自动传递给构造函数和方法。
7条答案
按热度按时间omtl5h9j1#
您需要在此处示例化一个类示例。
用途
小例子-
7gyucuyw2#
您需要先将其初始化:
y1aodyip3#
比我在这里看到的所有其他解决方案都更有效、更简单:
如果你不需要重用一个类示例,这是很好的。
0tdrvxhp4#
Python中的
self
关键字类似于C++ / Java / C#中的this
关键字。在Python 2中,它是由编译器隐式地完成的(是的,Python在内部进行编译)。只是在Python 3中,你需要在构造函数和成员函数中显式地提及它。例如:
vtwuwzda5#
你可以像
pump.getPumps()
一样调用方法。通过在方法上添加@classmethod
装饰器。类方法接收类作为隐式的第一个参数,就像示例方法接收示例一样。因此,只需调用
Pump.getPumps()
即可。在java中,它被称为
static
方法。g52tjvyc6#
如果过早地接受PyCharm的建议,在方法@staticmethod上添加注解,也会出现此错误。删除注解。
oyt4ldly7#
我得到了下面相同的错误:
TypeError:test()缺少1个必需的位置参数:'自我'
当一个示例方法有
self
的时候,我直接用类名调用它,如下所示:并且,当一个静态方法有
self
时,我通过一个对象或者直接通过类名调用它,如下所示:因此,我使用如下所示的对象调用示例方法:
然后,我从静态方法中删除了
self
,如下所示:然后,错误被解决了:
详细地,我在我的答案中解释了关于What is an "instance method" in Python?的示例方法,并且在我的答案中解释了关于@classmethod vs @staticmethod in Python的**@静态方法和@类方法**。