隐晦的python错误';classobj';对象没有属性'__getitem';。为什么我会得到这个?
我真的希望我能在这里说得更具体一些,但我已经通读了相关的问题,其中似乎没有一个与我在这里遇到的问题相关,我对我正在经历的问题没有任何理解。这是一个家庭作业,所以我很犹豫是否要把我所有的程序代码都放在这里,这是一个精简版。编译此文件,您将看到问题所在隐晦的python错误';classobj';对象没有属性'__getitem';。为什么我会得到这个?,class,python-2.7,object,types,instantiation,Class,Python 2.7,Object,Types,Instantiation,我真的希望我能在这里说得更具体一些,但我已经通读了相关的问题,其中似乎没有一个与我在这里遇到的问题相关,我对我正在经历的问题没有任何理解。这是一个家庭作业,所以我很犹豫是否要把我所有的程序代码都放在这里,这是一个精简版。编译此文件,您将看到问题所在 import copy class Ordering: def __init__(self, tuples): self.pairs = copy.deepcopy(tuples) self.sorted
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__'
Traceback(最近一次调用last):文件“”,第1行,在(模块)类型错误中:“classobj”对象没有属性“\uuu getitem\uuuu”
这是为什么 要访问列表中的元素,请使用方括号。要实例化类,请使用parens 换句话说,不要使用:
print Ordering[('A', 'B'), ('C', 'B'), ('D', 'A')]
使用:
这将在代码的更深处产生另一个错误,但是,由于这是一个家庭作业,我将让您稍微考虑一下这个问题
如何使用\uuu getitem\uuu
:
下面是一个通过\uuu getitem\uuu
返回正方形的类:
class HasItems(object):
def __getitem__(self, key):
return key**2
在操作中,它看起来如下所示:
>>> a = HasItems()
>>> a[4]
16
注意方括号。回答“这是为什么?”
您的演示代码不完整(请参阅上面的注释),但是\uuuuuu getitem\uuuuuuuuuuuuuuuuuuuuuu>
方法的问题显然与打印对象的语句有关(由于其他原因,该语句无法响应对调用的\uuuuuuuGetItem\uuuuuuuuuuuuuuuuuuu
方法进行应答的请求)而不是课堂本身
>>> 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']
aList=[('A','B'),('C','D'),('E','F')]#输入的规定格式
>>>已验证为列表的列表
[('A','B'),('C','D'),('E','F')]
>>>类型(aList)#交叉验证
>>>对于列表中的x:#成员的迭代器
... 打印x,键入(x)#显示值和类型
... 左(x)#请求如演示代码所示
...
(‘A’、‘B’)
回溯(最近一次调用):>>dir(排序)#.uu getitem_uuu方法缺失
[''.'文档'.''.'初始化'.'.'模块'.''.'添加未排序']
>>>dir(aList[0])#.uuu getitem_uuu方法存在
[“添加”、“类”、“包含”、“delattr”、“文档”、“eq”,
“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu getattribute\uuuuuuuuuuuuu,
"获取切片","gt","哈希","初始化","iter","le","len",,
"新","减少","减少","增加","新","减少","减少",,
"报告","rmul","setattr","大小","str","子类钩子",,
'计数','索引']
您可能已经注意到,您的演示代码使用了未定义的函数left()
,right()
,这些函数都是快速响应的关键。我的错误是,我忘了在课堂上用括号括起我的论点。同样感谢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']