python - setitem 和 getitem -- python

标签 python class

我创建了一个生成向量的 python 程序。现在我想使用函数__setitem____getitem__ 设置项目。例如,如果vector = Vec()andvector[3] = 26会将空向量更改为[0, 0, 0, 26]。我需要覆盖 __getitem____setitem__ 我已经列出了下面的代码,但是我在使用 get 和 set 函数时遇到了问题。有什么建议吗?

class Vec:
    def __init__(self, length = 0):
        self.vector = [0]*length

    def __str__(self):
        return '[{}]'.format(', '.join(str(i) for i in self.vector))
        #This formats the output according to the homework.
        #Adds '[' and ']' and commas between each 0

    def __len__(self):
        return len(self.vector)

    def extend(self, newLen):
        self.vector.append([0]*newLen)
        return (', '.join(str(j) for j in self.vector))

    def __setitem__(self, key, item):
        self.vector[key] = item

    def __getitem__(self, key):
        return self.vector[key]

最佳答案

你有几个问题:

  1. extend 本质上是在原始向量的末尾附加一个新向量,而不是增加原始向量的长度。不清楚它是否需要返回修改后向量的字符串表示形式(除非它只是为了调试目的)。

    def extend(self, newlength):
        # Assume newlength is greater than the old
        self.vector.extend([0] * (newlength - len(self)))
    
  2. __setitem__如果key过大需要调用extend

    def __setitem__(self, key, item):
        if key >= len(self):
            self.vector.extend(key+1)
        self.vector[key] = item
    
  3. __getitem__ 需要访问底层列表,而不是使用未定义的属性

    def __getitem__(self, key):
        # It's probably better to catch any IndexError to at least provide
        # a class-specific exception
        return self.vector[key]
    

关于python - setitem 和 getitem -- python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20356401/

相关文章:

python - 将 Django 的 FileField 设置为现有文件

python - 将 2 个 python 类对象添加在一起

php - 我如何访问在 php 类中动态定义的属性

c++ - 匿名类上的虚拟表

python - 通过 "OTHER"python 重命名不太频繁的类别

python - 如何根据其他列中的条件对 pandas 的 Dataframe 列进行操作

python - 是否有推荐的Python机器学习包?

python - 读取有时包含多个空格的 CSV

php - 如何动态加载php代码并检查类是否实现接口(interface)

不继承属性的Python子类