我正在尝试在Python中实现一个Vector3类。如果我要在C++或C#中编写Vector3类,我会将X、Y和Z成员存储为浮点数,但是在Python中,我了解到鸭子类型是最好的方法。因此,根据我的C++/C#知识,我编写了以下代码:
class Vector3:
def __init__(self, x=0.0, y=0.0, z=0.0):
assert (isinstance(x, float) or isinstance(x, int)) and (isinstance(y, float) or isinstance(y, int)) and \
(isinstance(z, float) or isinstance(z, int))
self.x = float(x)
self.y = float(y)
self.z = float(z)
这个问题涉及到断言语句:在这种情况下(用于数学中的Vector3实现),你会使用它们吗?我还将其用于类似的操作。
def __add__(self, other):
assert isinstance(other, Vector3)
return Vector3(self.x + other.x, self.y + other.y, self.z + other.z)
你在这些情况下会使用assert吗?根据这个网站:https://wiki.python.org/moin/UsingAssertionsEffectively,不应该过度使用assert,但对于像我这样一直使用静态类型的人来说,不检查相同数据类型是非常奇怪的。