我有以下代码:
class VectorN(object):
def __init__(self, param):
if isinstance(param, int):
self.dim = param
self.data = [0.0] * param
elif isinstance(param, tuple):
self.dim = 3
self.data = param
#else:
#raise TypeError("You must pass an int or sequence!")
def __str__(self):
return "<Vector" + str(self.dim) + ": " + str(self.data) + ">"
def __len__(self):
return len(self.data)
def __setitem__(self, key, item):
self.data[key] = item
现在,当我尝试使用以下代码调用__setitem__
方法时,
w = VectorN((1.2, "3", 5))
w.setitem(0, 9.9)
print(z)
print(w)
print(z[0])
print(len(v))
它给了我:
AttributeError:'VectorN'对象没有属性'setitem'
答案 0 :(得分:0)
那是因为__setitem__
是magic method。这是一个特殊的功能,允许您创建container objects。
因为它是一种神奇的方法,所以你不需要通过它的名字直接调用它 - 而是Python语言的内置方面控制它的行为。请注意,它仍然只是一种常规方法;你可以按名称调用它,但语法将是w.__setitem__(0, 9.9)
。
通过定义__setitem__
,您可以改为设置如下值:w[0] = 9.9
。
__setitem__
:
使用符号self [nkey] = value定义项目分配时的行为。