我写了自己的矢量类:
#! /usr/bin/env python3
class V:
"""Defines a 2D vector"""
def __init__(self,x,y):
self.x = x
self.y = y
def __add__(self,other):
newx = self.x + other.x
newy = self.y + other.y
return V(newx,newy)
def __sub__(self,other):
newx = self.x - other.x
newy = self.y - other.y
return V(newx,newy)
def __str__(self):
return "V({x},{y})".format(x=self.x,y=self.y)
我想定义V(0,0)是一个空向量,这样就可以了:(第一种情况应该返回“Vector is empty”)
v = V(0,0)
u = V(1,2)
if u:
print (u)
else:
print("Vector is empty")
if v:
print(v)
else:
print("Vector is empty")
答案 0 :(得分:12)
您可以实施特殊方法__bool__
:
def __bool__ (self):
return self.x != 0 or self.y != 0
请注意,在Python 2中,特殊方法名为__nonzero__
。
或者,因为你有一个向量,所以实现 __len__
并提供实际的向量长度可能更有意义。如果未定义__bool__
,Python将自动尝试使用__len__
方法获取长度并评估它是否为零。
答案 1 :(得分:6)
定义__bool__
,如下所示:
class V:
"""Defines a 2D vector"""
def __init__(self,x,y):
self.x = x
self.y = y
def __bool__(self):
return self.x != 0 or self.y != 0
# Python 2 compatibility
__nonzero__ = __bool__
答案 2 :(得分:1)
如果您只关心输出。只需扩展 __str__
方法。
def __str__( self ):
if self.x and self.y :
return "V({x},{y})".format( x = self.x, y = self.y )
else:
return "Vector is empty"
v = V( 0, 0 )
u = V( 1, 2 )
print v
print u
输出将是:
Vector为空
V(1,2)