を拡張してstr
、マジックメソッドをオーバーライドしようとしています__cmp__
。次の例は、が使用されたときにマジックメソッド__cmp__
が呼び出されないことを示しています。>
class MyStr(str):
def __cmp__(self, other):
print '(was called)',
return int(self).__cmp__(int(other))
print 'Testing that MyStr(16) > MyStr(7)'
print '---------------------------------'
print 'using _cmp__ :', MyStr(16).__cmp__(MyStr(7))
print 'using > :', MyStr(16) > MyStr(7)
実行結果:
Testing that MyStr(16) > MyStr(7)
---------------------------------
using __cmp__ : (was called) 1
using > : False
明らかに、>
ビルトイン内の基礎となる「比較」機能を使用すると、呼び出されます。この場合は、アルファベット順です。
__cmp__
ビルトインをマジックメソッドでオーバーライドする方法はありますか?そして、あなたが直接できない場合-あなたができる非魔法の方法とは異なるここで何が起こっているのですか?