我不确定这是否可能因为在线查找和回答有困难,可能因为我不知道必须解决问题。所以下面的代码是我想要做的基本例子。
class Names():
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
>>> i = []
>>> i.append(Names("bob"))
>>> i.append(Names("jill"))
>>> i
[bob, jill]
>>> "bob" in i
False
我有一个Name类的列表,如果名称已存在,则返回True。如果知道如何让这个工作?
答案 0 :(得分:9)
有几种方法可以做到这一点。
最简单的方法是使用any
:
any(item.name == 'bob' for item in i)
更复杂的版本是在您的班级上定义__eq__
方法:
def __eq__(self, val):
return self.name == val
现在您的原始"bob" in i
代码将有效。
(对于实际代码,如果您在名称的两个实例之间,而不是字符串,则可能需要检查该方法。)
答案 1 :(得分:2)
您可以遍历列表并根据字符串检查每个对象的{articles created_by="user:id"}...{/articles}
属性。
.name
答案 2 :(得分:1)
指出更多细节。
当你问
时"bob" in i
你问的是字符串"bob"
是否在列表中。
即使你问是否
Names("bob") in i
你得到假,因为列表中没有确切的对象。
如果您想使用相同的__eq__
来对待Names
,则可以在课程中添加name
方法:
class Names():
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
def __eq__(self, other):
return self.name == other.name