class - 神秘的 python 错误 'classobj' 对象没有属性 '__getitem__'。为什么我得到这个?

标签 class python-2.7 object types instantiation

我真的希望我能在这里更具体一些,但我已经通读了相关问题,但似乎没有一个与我在这里遇到的问题有关,而且我也不了解我遇到的问题。这是一个家庭作业,所以我犹豫要不要把我所有的程序代码都贴出来,这是一个精简版。编译这个,你会看到这个问题。

import copy

class Ordering:

    def __init__(self, tuples):

        self.pairs = copy.deepcopy(tuples)
        self.sorted = []
        self.unsorted = []

        for x in self.pairs:
            self.addUnsorted(left(x))
            self.addUnsorted(right(x))

    def addUnsorted(self, item):

        isPresent = False

        for x in self.unsorted:
            if x == item:
                isPresent = True

        if isPresent == False:
            self.unsorted.append(left(item))

我在这里创建了一个类 Ordering,它采用 [('A', 'B'), ('C', 'B'), ('D', 'A')] 形式的列表(其中 a 必须在 b 之前,c 必须在 b 之前,等等)并且应该以部分有序的形式返回它。我正在调试我的代码以查看它是否正常工作,但由于返回的错误消息,我还不能这样做。

当我在终端中输入以下内容时:

print Ordering[('A', 'B'), ('C', 'B'), ('D', 'A')]

我收到以下错误信息:

Traceback (most recent call last): File "<stdin>", line 1, in (module) Type Error: 'classobj' object has no attribute '__getitem__'

这是为什么?!

最佳答案

要访问列表的元素,请使用方括号。要实例化一个类,请使用括号。

换句话说,不要使用:

print Ordering[('A', 'B'), ('C', 'B'), ('D', 'A')]

使用:

print Ordering((('A', 'B'), ('C', 'B'), ('D', 'A')))

这会从代码的更深处产生另一个错误,但由于这是一项家庭作业,我会让你稍微考虑一下。

如何使用__getitem__:

作为一个最小的例子,下面是一个通过 __getitem__ 返回正方形的类:

class HasItems(object):
    def __getitem__(self, key):
        return key**2

运行起来是这样的:

>>> a = HasItems()
>>> a[4]
16

注意方括号。

关于class - 神秘的 python 错误 'classobj' 对象没有属性 '__getitem__'。为什么我得到这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227568/

相关文章:

Java:获取类的属性以构造字符串表示

ruby - Rspec Array_extensions 类或实例方法

python - 如何更新 Tkinter 标签小部件的图像?

Python 随机十六进制生成器

java - 类需要自己构造自己

java - 可以从 Java 类调用 servlet 吗?

python - 如何检查两个实例是否属于同一类 Python

Python csv reader不完整的文件行迭代

javascript - 从 javascript 对象中查找范围

javascript - 如何通过循环将解析推送到数组?