-3

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

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'

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

4

1 回答 1

3

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

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

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

当我们这样做的时候,如果这是 Python 2.x,你应该总是通过显式继承来定义新样式的类object——例如,class TamAccConnect2(object):.

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


如果您以类似的方式创建了其他类,那么它们就不好了。由于其他错误取消了这个错误,您可能已经侥幸逃脱(例如,您在不应该有的时候传递了一个参数,并且该方法从未使用过它self,或者以碰巧可以使用的方式使用它你通过的论点),但它实际上并没有按预期工作。


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

于 2013-10-14T22:36:29.153 回答