我有一个类,我想初始化一些变量,然后在其他函数中使用它们。
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'
为什么我会得到这样的错误,我已经以类似的方式创建了其他类,并且它们一直很好。
答案 0 :(得分:3)
你不能在类本身上调用实例方法;你必须创建一个实例,然后在该实例上调用该方法:
>>> connect2 = TamAccConnect2()
>>> connect2.func1()
当您尝试调用其他方法ReadCurrentData
时,您将遇到类似但相反的问题。因为你没有给它一个self
参数,当你试图在一个实例上调用它时,你会得到TypeError
关于许多参数,而不是少数。 (另外,看起来您可能期望ReadCurrentData
更新类,实例或全局变量,而不是仅仅创建一个方法完成时就消失的局部变量。)
虽然我们正在使用它,如果这是Python 2.x,您应该始终通过显式继承object
来定义新式类 - 例如,class TamAccConnect2(object):
。
很难在SO答案中比在教程中更好地解释所有这些,所以请重新阅读Classes上的官方教程部分,或者您正在学习的任何其他教程或文本。
如果你以类似的方式创建了其他类,那么它们就不对了。你可能已经因为其他错误而取消了这一点(例如,当你不应该使用时,你传递了一个参数,并且该方法从未使用过它self
,或者以这样的方式使用它它碰巧与您传递的参数一起工作,但它实际上并没有按预期工作。
如果您想知道为什么错误消息看起来像这样,那就有点复杂了。我试图写一个温和的解释here,但我怀疑它仍然很难理解。无论如何,简短的版本是你没有传递一个参数来匹配self
参数,并且你没有调用一个绑定方法,它会自动传递它绑定的对象作为参数来匹配{{1参数,所以你得到一个错误,说你错过了self
参数。