5
Ben str
genişletmek ve sihirli yöntem __cmp__
geçersiz çalışıyorum.Eğer sihirli bir yöntem geçersiz kılabilir miyim?
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)
sonuçları çalıştırdığınızda: Aşağıdaki örnek >
kullanıldığında sihirli yöntem __cmp__
asla denir göstermektedir >
kullanırken Açıkçası
Testing that MyStr(16) > MyStr(7)
---------------------------------
using __cmp__ : (was called) 1
using > : False
, içinde işlevsellik "karşılaştırma" altında yatan builtin çağrılıyor, bu durumda bir alfabe düzenleniyor.
sihirli yöntemlerle__cmp__
yerleşiğini geçersiz kılmak için bir yolu var mı? Ve eğer doğrudan yapamazsanız - burada neler yapabileceğiniz sihirli olmayan yöntemlerden farklıdır?
the corresponding magic method veya muadili tanımlanır ve
NotImplemented
dönmemesi halinde
Teşekkürler! Bu küçük gerçeği hiç bilmiyordum. Mantıklı. Yanıt hızı için +1! BTW - Çok hızlıydı - hala cevabı kabul etmeme izin vermek için stackoverflow'u bekliyorum (henüz 2 dakika beklemem gerekiyor). Hızlı ve değerli bir cevap için nasıl? Henüz :) – Rocketman
Ahh o değerli ilan edilemez böylece hızlı oldu - İşte ... şimdi kabul go! – Rocketman
'__() 'çağrı http://ideone.com/ ([' NotImplemented' dönmek için '') __lt __() ve '__gt __ (' str' yöntemlerine] geçersiz kılma'> 'operatör için zorlanabilir __cmp rC5D8v) yani "eğer başka bir sihir karşılaştırma yöntemi tanımlanmışsa" cevabınız kesin değildir. Tutarlılık için tüm veya yöntemlerden hiçbiri tanımlanmalıdır: '__lt __() ',' __gt __() ',' __le __() ',' __ge __() ',' __eq __() ',' __ne __() ', ayrıca __hash __() '. – jfs