class只取三个参数,给出两个参数

时间:2013-07-29 21:14:31

标签: python

我正在尝试制作我的第一款游戏,它类似于与自行车的tron游戏,到目前为止我已经创建了一个自行车类和几个功能来帮助。但是当它运行如下时,当我尝试用速度声明一个Bike对象时出现错误,它表示:

  

类Vector精确地取三个参数,两个参数由   what_direction函数。

这对我来说是个问题,因为我创建了一个用于改变方向的2x2矩阵和一个用向量乘以矩阵的函数。我该怎么做才能解决这个错误?

   import random, math, pygame, sys

    class Vector(object):
        """ |x| = [0]
            |y| = [1] """
        def __init__(self, x, y):
            self.vec = [ x, y]

    def what_direction():  
        x = random.uniform(0.0, 5.0)
        y = math.sqrt(25-(x**2))
        return x, y

    class Bike(object):
        def __init__(self):
            self.position = [random.randint(0, 200), random.randint(0, 200)]
            self.velocity = Vector(what_direction())
            self.score = 0
            self.path_traveled = []

2 个答案:

答案 0 :(得分:9)

你的what_direction()函数返回一个值元组,并且你试图将该元组传递给一个带有2个参数的函数。 Python认为你传递了一个参数(那个2元组)。在表达式Vector(what_direction())中使用元组之前,需要解压缩元组。你可以自己做:

a, b = what_direction()
Vector(a, b)

或者你可以使用元组解包操作符*

Vector(*what_direction())

答案 1 :(得分:5)

你需要使用这样的星号:

self.velocity = Vector(*what_direction())

以便将两个组件传递给Vector构造函数。目前你传递的是一个带有两个成员的元组的参数。星号解压缩元组,将其成员值作为单独的参数传递给Vector()