返回顶部

我最近开始自学游戏编程。有人推荐我从 Python 入手,我得到了《用 Python 和 Pygame 开始游戏开发:从新手到专业人士》一书。我到了他们教授 Vectors 和创建 Vector2 类的部分。一切都很顺利,直到我试图重载除法运算符。我的代码是这样的: class Vector2(object): def __init__(self, x=0.0, y=0.0): self.x = x self.y = y def __str__(self): return "(%s, %s)"%(self.x, self.y) @classmethod def from_points(cls, P1, P2): return cls(P2[0] - P1[0], P2[1] - P1[1]) def __add__(self,rhs): return Vector2(self.x + rhs.x, self.y + rhs.y) def __sub__(self,rhs): return Vector2(self.x - rhs.x, self.y - rhs.y) def __mul__(self, scalar): return Vector2( self.x*scalar, self.y*scalar) def __div__(self, scalar): return Vector2( self.x/scalar, self.y/scalar) 现在,当我尝试调用“/”运算符时,会显示: AB = Vector2(10.0,25.0) print(AB) # <<<<(10.0, 25.0) v1 = AB + Vector2(20.,10.) print(v1) # <<<<(30.0, 35.0) v2 = AB - Vector2(20.,10.) print(v2) # <<<<(-10.0, 15.0) v3 = AB * 3 print(v3) # <<<<(30.0, 75.0) print(v3 / 3) TypeError: unsupported operand type(s) for /: 'Vector2'

2

0/300

评论 1

cc果冻儿

在 Python 3.x 中,您需要重载__floordiv__and__truediv__运算符,而不是__div__运算符。前者对应于//运算(返回一个整数),后者对应于/(返回一个浮点数)。

2022-01-20 16:01:55

- 没有更多了 -