Python 个实例和 class 个命名空间

Python instance and class namespaces

我是 Python 的新手并且熟悉 Java 和 C#,所以下面的代码可能完全不是 Pythonic 的。 我正在尝试获取 Class Vector 实例的索引值,其中包含的整数列表名为 vec.

class Vector:
def __init__(self,*args,**kwargs):
    if(args and args.length()>=2):
        self.dimension=args[0]
        self.vec=args[1]
    elif(kwargs):
        if(kwargs.get('vec')):
            self.vec=kwargs.get('vec')
            self.dimension=len(self.vec)
        elif(kwargs.get('n')):
            self.dimension=kwargs.get('n')
            nulllist=[]
            for x in range(0,kwargs.get('n')):
                nulllist.append(0)
            self.vec=nulllist

def __getitem__(v,i):
    if(v.vec[i]):
        return v.vec[i]
    else:
        return "None"

当我尝试获取 v0 = Vector(n=2) assert(v0[0] == 0)

我得到一个断言错误,因为 v0[0] returns "None" 如果我 print(v0[0]) 打印输出是 "None"

我做错了什么? 提前致谢。

零的布尔解释为假。因此,如果 v.vec[i] 为零,您的 if(v.vec[i]): 将为假,并且不会输入 if 块。

目前尚不清楚您试图用 if 测试什么。如果您试图测试该元素是否存在,那将无法做到。你最好做这样的事情:

try:
    return v.vec[i]
except IndexError:
    return None

(也不确定您为什么要返回 "None" 而不是 None,但如果您愿意,您当然可以调整我的示例来做到这一点。)

您应该在构造函数中初始化 self.vec(对于未调用 if 和 elif 的情况)。

class Vector:
    def __init__(self,*args,**kwargs):
        self.vec = None
        ...


v0 = Vector(n=2)
if v0.vec is not None:
    print('Vector defined')
else:
    print('ERROR: No Vector !')