0

我已经构建了自己的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"

以上是我要实现的目标的简单表示。我尝试了很多方法,但我无法让程序打印出来。有谁知道如何做到这一点?

4

3 回答 3

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

如果我正确地阅读了您的帖子。


最后,根据 的 API User,您可以ID在相等测试中使用:

class User(object):
    def __eq__(self,other):
       return self.userID == other
   #other methods here

现在您可以像最初尝试做的那样在列表中使用__contains__( ) :in

if "1" in self.users:
   print "True"
于 2012-11-28T22:14:44.507 回答
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__.

我也通读了这个问题:Python 中 __str__ 和 __repr__ 之间的区别

于 2012-11-28T22:15:01.290 回答
0

根据您的问题定义,听起来您正在尝试查找是否有任何用户 ID 属性为“1”的用户。

您的__repr__函数恰好使用 theuserID作为表示的事实确实意味着这是搜索它的最佳方式。为什么不只是这个?

if any(user.userID == '1' for user in self.users):
    print "True"

str当然,如果您确实需要搜索字符串表示形式,请使用 mgilson 或 Blender 发布的答案(并弄清楚repr您想要哪个)。但如果没有必要,请不要这样做。

于 2012-11-28T22:23:49.367 回答