Python类缺少位置参数

2024-09-30 22:28:15 发布

您现在位置: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'

为什么我会遇到这样的错误,我用类似的方式创建了其他类,它们都很好。在


Tags: 函数noselfyouinitdevicedefclass
1条回答
网友
1楼 · 发布于 2024-09-30 22:28:15

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

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

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

在这里,如果这是python2.x,您应该始终通过显式继承object-例如,class TamAccConnect2(object):来定义新样式的类。在

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


如果你用类似的方式创建了其他类,它们就不好了。您可能因为其他错误而逃脱了惩罚(例如,您在不该传递参数的时候传递了参数,并且该方法从未使用过它的self,或者使用它的方式碰巧与您传递的参数一起工作),但它实际上并没有按预期工作。在


如果您想知道错误消息的确切原因是这样的,那就有点复杂了。我试图写一个温和的解释here,但我怀疑还是很难理解。总之,简而言之,您没有传递一个参数来匹配self参数,也没有调用一个绑定方法,该方法会自动将它绑定到的对象作为参数传递给与self参数匹配的参数,因此会出现一个错误,说您缺少self参数。在

相关问题 更多 >