我构建了自己的类User
,其属性为userID
。我覆盖了__repr__
,因此它是userID
字符串。
在另一个类中,我有一个数组self.users = []
,其中有几个User
个实例。出于测试目的,我给了他们用户ID 1和2.我使用:
'[%s]' % ','.join(map(str, self.users))
要打印数组的内容,请生成:
[1,2]
我试图按照以下方式做出if语句:
if "1" in self.users:
print "True"
以上是我想要实现的目标的简单表示。我已经尝试了很多方法,我无法让程序打印出来。有谁知道怎么做?
答案 0 :(得分:3)
你想要:
if any("1" in str(x) for x in self.users):
print "True"
可能更好的是:
if any("1" == x.userID for x in self.users):
print True
如果我正确地阅读你的帖子。
最后,根据User
的API,您可以在相等测试中使用ID
:
class User(object):
def __eq__(self,other):
return self.userID == other
#other methods here
现在,您可以在列表中使用__contains__
(in
),就像您最初尝试的那样:
if "1" in self.users:
print "True"
答案 1 :(得分:2)
"1" in self.users
检查字符串"1"
是否在列表self.users
中。您正在尝试检查是否存在字符串表示为"1"
的用户,因此您可以尝试这样的操作:
if '1' in map(str, self.users):
print 'True
另外,我会在您的班级定义中将__repr__
更改为__str__
。
__repr__
通常返回一个可以eval()
回到原始对象的字符串,而__str__
返回一个人类可读的对象表示。你正在做后者,所以我建议你使用__str__
而不是__repr__
。
答案 2 :(得分:0)
从您的问题定义中,听起来您正试图找到您的userID属性为“1”的用户。
您的__repr__
函数碰巧使用userID
作为表示确实意味着这是搜索它的最佳方式。为什么不呢?
if any(user.userID == '1' for user in self.users):
print "True"
如果您确实需要搜索字符串表示,当然,请使用mgilson或Blender发布的答案(并找出您想要的str
和repr
中的哪一个)。但如果没有必要,不要这样做。