'MyClass'对象没有属性'__getitem__'

flo*_*urr 20 python

我有一个像这样的课:

class MyClass(object):
    def __init__(self, id, a, b, c):
        self.myList     = []
        self.id         = id
        self.a          = a
        self.b          = b
        self.c          = c

    def addData(self, data):
        self.myList.append(data)
Run Code Online (Sandbox Code Playgroud)

在我的主代码中,我创建了一个名为MyClass实例的列表myClassList.在一行中,我必须检查具有给定的项目是否id已存在.我是这样做的:

id = 'foo' # in real code is set dynamically 
recent_item = next( (item for item in myClassList if item['id'] == id), None )
Run Code Online (Sandbox Code Playgroud)

该代码中的第二行给出了以下错误:

'MyClass'对象没有属性 '__getitem__'

我该怎么办?

hir*_*ist 25

item不是字典而是类,因此它具有不同的语法来访问成员.id改为以这种方式访问:

item.id
Run Code Online (Sandbox Code Playgroud)


Pad*_*ham 15

如果您确实希望能够使用inst["attr"]并解释错误来访问属性,则需要__getitem__向您的类添加一个:

class MyClass(object):
    def __init__(self, id, a, b, c):
        self.myList     = []
        self.id         = id
        self.a          = a
        self.b          = b
        self.c          = c

    def addData(self, data):
        self.myList.append(data)

    def __getitem__(self, item):
        return getattr(self, item)
Run Code Online (Sandbox Code Playgroud)