Python:在实例化期间传递参数

2024-09-29 23:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个叫做“数据包”的类,如下所示。我试图实例化它,以便使用方法getAccgetRot返回的值。我还包括在“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()

Tags: 实例selfdataifbytespacketmaindef
2条回答

从代码和回溯中,答案似乎非常明显:您的data_packet类接受一个必需的参数l(即“L”小写-一个不应该使用的标识符…)-显然是一个listFWIW-您不会传递它。你知道吗

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)。你知道吗

相关问题 更多 >

    热门问题