6

我写了自己的向量类:

#! /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) 是一个空向量,这样就可以了:(第一种情况应该返回“向量为空”)

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")
4

3 回答 3

12

您可以实现特殊方法__bool__

def __bool__ (self):
    return self.x != 0 or self.y != 0

请注意,在 Python 2 中,特殊方法名为__nonzero__.

__len__或者,因为您有一个向量,所以实现并提供实际的向量长度可能更有意义。如果__bool__未定义,Python 将自动尝试使用该__len__方法获取长度并评估它是否不为零。

于 2013-09-17T11:28:50.987 回答
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__
于 2013-09-17T11:29:38.020 回答
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

输出将是:

向量为空

V(1,2)

于 2013-09-17T11:34:48.513 回答