我无法通过错误:
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。
Python中的self关键字类似于c++ / Java / c#中的this关键字。
在Python 2中,它是由编译器隐式完成的(是的,Python在内部进行编译)。
只是在Python 3中,你需要在构造函数和成员函数中显式地提到它。例子:
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()