Python类缺少位置参数

时间:2013-10-14 22:30:07

标签: python

我有一个类,我想初始化一些变量,然后在其他函数中使用它们。

class TamAccConnect2: 
    def __init__( self ):
        self.deviceName = []
    def func1(self):
        device1 = 567;
        self.deviceName = 56756
        self.device = device1;
        print('No, you called me!')
    def ReadCurrentData():
        errorCode = 1;
        return errorCode;

>>> TamAccConnect2.func1()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func1() missing 1 required positional argument: 'self'

为什么我会得到这样的错误,我已经以类似的方式创建了其他类,并且它们一直很好。

1 个答案:

答案 0 :(得分:3)

你不能在类本身上调用实例方法;你必须创建一个实例,然后在该实例上调用该方法:

>>> connect2 = TamAccConnect2()
>>> connect2.func1()

当您尝试调用其他方法ReadCurrentData时,您将遇到类似但相反的问题。因为你没有给它一个self参数,当你试图在一个实例上调用它时,你会得到TypeError关于许多参数,而不是少数。 (另外,看起来您可能期望ReadCurrentData更新类,实例或全局变量,而不是仅仅创建一个方法完成时就消失的局部变量。)

虽然我们正在使用它,如果这是Python 2.x,您应该始终通过显式继承object来定义新式类 - 例如,class TamAccConnect2(object):

很难在SO答案中比在教程中更好地解释所有这些,所以请重新阅读Classes上的官方教程部分,或者您正在学习的任何其他教程或文本。


如果你以类似的方式创建了其他类,那么它们就不对了。你可能已经因为其他错误而取消了这一点(例如,当你不应该使用时,你传递了一个参数,并且该方法从未使用过它self,或者以这样的方式使用它它碰巧与您传递的参数一起工作,但它实际上并没有按预期工作。


如果您想知道为什么错误消息看起来像这样,那就有点复杂了。我试图写一个温和的解释here,但我怀疑它仍然很难理解。无论如何,简短的版本是你没有传递一个参数来匹配self参数,并且你没有调用一个绑定方法,它会自动传递它绑定的对象作为参数来匹配{{1参数,所以你得到一个错误,说你错过了self参数。