"AttributeError:temp实例没有属性'__getitem__'究竟是什么意思?"

otm*_*ger -2 python class attributeerror

我正在尝试理解我现在使用python 2.7的问题.

这是来自test.py文件的代码:

class temp:
 def __init__(self):
  self = dict()
  self[1] = 'bla'
Run Code Online (Sandbox Code Playgroud)

然后,在终端上,我输入:

from test import temp
a=temp
Run Code Online (Sandbox Code Playgroud)

如果我进入a我得到这个:

>>> a
<test.temp instance at 0x10e3387e8>
Run Code Online (Sandbox Code Playgroud)

如果我试着读a[1],我得到这个:

>>> a[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: temp instance has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

kin*_*all 5

首先,您发布的代码不会产生您记下的错误.你还没有实例化这个类; a只是另一个名字temp.所以你的实际错误信息是:

TypeError: 'classobj' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

即使你实例化它(a = temp())它仍然不会做你想象的那样.分配self = dict()只是更改变量的值self的范围内__init__()的方法; 它对实例没有任何作用.当__init__()方法结束时,此变量消失,因为您没有将其存储在其他任何位置.

看起来好像你可能想要子类dict:

class temp(dict):
    def __init__(self):
        self[1] = 'bla'
Run Code Online (Sandbox Code Playgroud)