0

、メソッド (およびおよびも同様)を.defines し、キーが文字列である辞書のように動作するクラスがあります。__getitem____setitem__keysitems

ただし、inオペレーターは期待どおりに動作しません。

>>> myObject=MyClass()
>>> 'abc' in myObject.keys()
False
>>> 'abc' in myObject
ArgumentError: Python argument types in
    MyClass.__getitem__(MyClass, int)
did not match the C++ signature:
    __getitem__(MyClass {lvalue}, std::string)

キーを使用する__getitem__と、 python が で呼び出そうとするのはなぜですか?intstr

4

1 に答える 1

1

のようだ

'abc' in myObject 

次のように評価されています。

for i in myObject:
    if myObject[i] == 'abc':
        return true

は整数iです。

__contains__(self, value)魔法のメソッドを実装してみてください。

于 2012-06-11T11:24:37.703 に答える