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