0

dict をラップするカスタム クラスを作成しています。そのため、 getitemを実装したいと考えています。また、この dict ではタプルをキーとして使用します。しかし、タプルを getitem に渡そうとすると、Python が KeyError をスローします。タプルをgetitemに渡すと、タプルが int にキャストされているようです:

コード:

Class Board(object):
  def __getitem__(self, key):
    print "type in call: " + type(key)
    return self.board[key]

# in main somewhere
board = Board()

print "type before call: " + type((1, 2))
if (1, 2) in board:
  print "It's there!"

出力:

type before call: <type 'tuple'>
type in call: <type 'int'>

## traceback stuff ##
KeyError: 0

Board は、Python が満足するためにマッピング タイプから継承する必要がありますか? また、Python が最初にこのキャストを実行しようとするのはなぜですか?

4

1 に答える 1

1

封じ込め__contains__()は、実装されない限り繰り返されます。というわけで実装。

于 2012-03-11T06:21:01.527 に答える