我有一个像这样的课:
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)
| 归档时间: |
|
| 查看次数: |
29228 次 |
| 最近记录: |