gpt4 book ai didi

python - 尝试重载运算符时出错 "/"

转载 作者:IT老高 更新时间:2023-10-28 20:30:49 27 4
gpt4 key购买 nike

我最近开始自学游戏编程。有人推荐我从 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' and 'int'

这一切都在 Python 3.3 中,但如果我用 Python 2.7 运行它,一切正常。问题出在哪里?

最佳答案

在 Python 3.x 中,您需要重载 __floordiv____truediv__ 运算符,而不是 __div__ 运算符。前者对应//操作(返回整数),后者对应/(返回 float )。

关于python - 尝试重载运算符时出错 "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com