python-3.x TypeError:缺少1个必需的位置参数:'自我'

pokxtpni  于 2022-11-19  发布在  Python
关注(0)|答案(7)|浏览(186)

我无法忽略这个错误:

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会自动传递给构造函数和方法。

omtl5h9j

omtl5h9j1#

您需要在此处示例化一个类示例。
用途

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
7gyucuyw

7gyucuyw2#

您需要先将其初始化:

p = Pump().getPumps()
y1aodyip

y1aodyip3#

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

Pump().getPumps()

如果你不需要重用一个类示例,这是很好的。

0tdrvxhp

0tdrvxhp4#

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

vtwuwzda5#

你可以像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方法。

g52tjvyc

g52tjvyc6#

如果过早地接受PyCharm的建议,在方法@staticmethod上添加注解,也会出现此错误。删除注解。

oyt4ldly

oyt4ldly7#

我得到了下面相同的错误:
TypeError:test()缺少1个必需的位置参数:'自我'
一个示例方法self的时候,我直接用类名调用它,如下所示:

class Person:
    def test(self): # <- With "self" 
        print("Test")

Person.test() # Here

并且,当一个静态方法self时,我通过一个对象或者直接通过类名调用它,如下所示:

class Person:
    @staticmethod
    def test(self): # <- With "self" 
        print("Test")

p = Person()
p.test() # Here

# Or

Person.test() # Here

因此,我使用如下所示的对象调用示例方法:

class Person:
    def test(self): # <- With "self" 
        print("Test")

p = Person()
p.test() # Here

然后,我从静态方法中删除了self,如下所示:

class Person:
    @staticmethod
    def test(): # <- "self" removed 
        print("Test")

p = Person()
p.test() # Here

# Or

Person.test() # Here

然后,错误被解决了:

Test

详细地,我在我的答案中解释了关于What is an "instance method" in Python?示例方法,并且在我的答案中解释了关于@classmethod vs @staticmethod in Python的**@静态方法@类方法**。

相关问题