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

問題の定義から、userID 属性が「1」のユーザーがいるかどうかを調べようとしているように思えます。

__repr__関数がたまたま表現として を使用しているという事実は、userIDそれを検索する最良の方法であることを意味します。なぜこれだけではないのですか?

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

もちろん、文字列表現を本当に検索する必要がある場合は、mgilson または Blender によって投稿された回答を使用してください (そして、どちらが必要かを判断してstrくださいrepr)。ただし、必要がない場合は、実行しないでください。

于 2012-11-28T22:23:49.367 に答える