我有一个叫做“数据包”的类,如下所示。我试图实例化它,以便使用方法getAcc
和getRot
返回的值。我还包括在“main”中创建数据包类实例的代码
我得到这个错误:
Traceback (most recent call last)
mydata = data_packet()
TypeError: __init__() takes exactly 2 arguments (1 given)
我的假设是,实例正在将mydata
传递给名为self的参数,但没有传递给l。如果我是正确的,我如何解决这个错误?你知道吗
class data_packet (object):
def __init__(self, l):
self.data = [0,0,0,0,0,0,0,0,0]
self.type = ord(l[2])
if self.type == 0: # accel
self.data[0] = four_bytes(l[3],l[4],l[5],l[6]) * 1.0 / (1<<16)
self.data[1] = four_bytes(l[7],l[8],l[9],l[10]) * 1.0 / (1<<16)
self.data[2] = four_bytes(l[11],l[12],l[13],l[14]) * 1.0 /(1<<16)
elif self.type == 6: # heading
self.data[0] = four_bytes(l[3],l[4],l[5],l[6]) * 1.0 / (1<<16)
else: # unsupported
pass
def display(self):
if self.type == 0:
print 'accel: %7.3f %7.3f %7.3f' % \
(self.data[0], self.data[1], self.data[2])
elif self.type == 6:
print 'heading: %7.4f' % self.data[0]
else:
print 'what?'
def getAcc(self):
while self.type == 0:
.....dosomethings....
return accelData
def getRot(self):
while self.type == 5:
..... dosomethings....
return rotData
def main():
mydata = data_packet()
mydata.getAcc()
mydata.getRot()
print "********* : ", mydata.getAcc()
if __name__ == "__main__":
main()
从代码和回溯中,答案似乎非常明显:您的
data_packet
类接受一个必需的参数l
(即“L”小写-一个不应该使用的标识符…)-显然是一个list
FWIW-您不会传递它。你知道吗NB:
self
是当前实例,自动传入。你知道吗对象方法中的
self
是对实例化对象的引用。当通过点表示法调用方法时,例如mydata.getAcc()
,对象会自动作为第一个参数传递。一种更显式的实现方法是通过类调用方法:data_package.getAcc(mydata)
。你知道吗__init__
在对象实例化时自动调用,但在其他情况下,它的工作原理相同。书写data_package()
可以想象为data_package.__init(new_object)
。 但是,在类定义中,为__init
定义了第二个参数l
。对象实例化应该是data_package(l)
,这样l
就作为第二个参数传递给了__init__
。i、 例如data_package.__init(new_object, l)
。你知道吗相关问题 更多 >
编程相关推荐