我真的希望我能在这里更具体,但我已经阅读了相关问题,但这些问题似乎与我在这里遇到的问题无关,而且我对我遇到的问题一无所知。这是一个家庭作业,所以我犹豫是否要为程序提供所有代码,这里是一个精简版本。编译它,您将看到问题。
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')形式的列表(必须在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__'
为什么会这样?!
答案 0 :(得分:1)
要访问列表的元素,请使用方括号。要实例化一个类,请使用parens。
换句话说,请勿使用:
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
注意方括号。
答案 1 :(得分:0)
您的演示代码不完整(参考上面的评论),但 .__getitem__
方法的问题显然与print
对象的声明有关(由于其他原因确实无法响应回复被调用.__getitem__
方法的请求而不是类本身。
>>> aList = [ ('A','B'), ('C','D'), ('E','F')] # the stated format of input
>>> aList # validated to be a list
[('A', 'B'), ('C', 'D'), ('E', 'F')]
>>> type( aList ) # cross-validated
<type 'list'>
>>> for x in aList: # iterator over members
... print x, type( x ) # show value and type
... left( x ) # request as in demo-code
...
('A', 'B') <type 'tuple'>
Traceback (most recent call last): <<< demo-code does not have it
File "<stdin>", line 3, in <module>
NameError: name 'left' is not defined
>>> dir( Ordering ) # .__getitem__ method missing
[ '__doc__', '__init__', '__module__', 'addUnsorted']
>>> dir( aList[0] ) # .__getitem__ method present
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'count', 'index']