我无法通过错误:

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


当前回答

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()

其他回答

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

Use

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

你需要先初始化它:

p = Pump().getPumps()

您也可以通过过早地接受PyCharm的建议来注释一个方法@staticmethod来得到这个错误。删除注释。

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()

比我在这里看到的其他解决方案更简单:

Pump().getPumps()

如果您不需要重用类实例,这是非常好的。在Python 3.7.3上测试。