我正在尝试为我的向量创建一个通用类,其中的操作和方法同时适用于2D和3D。我有以下代码:
class Vector:
class _2D:
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def addNormal(self, normal):
self.normal = normal
def __str__(self):
return '<%s, %s>' % (self.x, self.y)
class _3D:
def __init__(self, x, y, z):
self.x = float(x)
self.y = float(y)
self.z = float(z)
def __str__(self):
return '<%s, %s, %s>' % (self.x, self.y, self.z)
我使用的__str__
方法如下:
a = Vector._2D(1, 2)
print str(a) # <1.0, 2.0>
b = Vector._3D(1, 2, 3)
print str(b) # <1.0, 2.0, 3.0>
事实上,我找不到(目前)一种方法来实现这一点,所以我可以这样做:
class Vector:
def __str__(self):
try:
return '<%s, %s, %s>' % (self.x, self.y, self.z)
except AttributeError:
return '<%s, %s>' % (self.x, self.y)
class _2D:
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def addNormal(self, normal):
self.normal = normal
class _3D:
def __init__(self, x, y, z):
self.x = float(x)
self.y = float(y)
self.z = float(z)
我想这是正确的方法,这样代码就更清晰了,而且不受冗余的影响。
我这样做的“原因”似乎并不明显,但我有很多方法,比如__add__
或__sub__
,可以使向量上的操作更容易。尤其是在我学习3D的时候
当我读到嵌套类在python中不是很好时,我非常愿意就如何做不同的事情提出建议,但我坚持认为 保持稍微相同,好像:
class _3D:
def __init__(self, x, y, z):
self.x = float(x)
self.y = float(y)
self.z = float(z)
def __str__(self):
return '<%s, %s, %s>' % (self.x, self.y, self.z)
def __add__(self, operand):
return _3D(self.x + operand.x, self.y + operand.y, self.z + operand.z)
a = _3D(1, 2, 3)
b = _3D(4, 5, 6)
print a + b # <5.0, 7.0, 9.0>
目前没有回答
相关问题 更多 >
编程相关推荐