gpt4 book ai didi

python - 方法 __setitem__ 上的 AttributeError

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:17 28 4
gpt4 key购买 nike

我有以下代码:

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' object has no attribute 'setitem'

最佳答案

那是因为__setitem__magic method 。这是一个特殊的函数,允许您创建 container objects .

因为它是一个神奇的方法,所以您不需要直接通过其名称来调用它,而是由 Python 语言的内置方面控制其行为。注意,这仍然只是一个普通的方法;您可以通过名称来调用它,但语法将是w.__setitem__(0, 9.9)

通过定义__setitem__,您可以设置一个值,如下所示:w[0] = 9.9

<小时/>

__setitem__,来自 A Guide to Python's Magic Methods :

Defines behavior for when an item is assigned to, using the notation self[nkey] = value.

关于python - 方法 __setitem__ 上的 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371659/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com