ben yapmak istiyorum:__rmod__ kullanarak str'nin% davranışının üzerine yazmak mümkün mü?
yapmak için yeterli kolaydırx %doSomething% y
bir str olan x durumlar dışında herhangi bir x ve herhangi y (aşağıdaki kodu bakınız).
herhangi bir yolu var mı (mesela özel bir yöntemi ekleyerek veya belirli bir hata yükselterek) (benzer şekilde% 1 doSomthing bir TypeError ile başarısız nasıl) başarısız biçimlendirme eski tarz dize neden ve doSomething tanımlanan __rmod__ yöntemi dönmek nesne?
class BinaryMessage(object):
def __init__(self, fn):
self._fn = fn
def __rmod__(self, LHS):
return BinaryMessagePartial(self._fn, LHS)
class BinaryMessagePartial(object):
def __init__(self, fn, LHS):
self._fn = fn
self._LHS = LHS
def __mod__(self, RHS):
return self._fn(self._LHS, RHS)
def _doSomething(a , b):
return a + b
doSomething = BinaryMessage(_doSomething)
result = 5 %doSomething% 6
assert result == 11
Netleştirmek için: "foo"% doSomething% "bar" '' '' foobar '' dönmek istiyor musunuz? Bunun imkansız olduğuna inanıyorum çünkü str .__ mod__ '' NotImplemented' döndürme yerine 'TypeError'ı yükseltir. – L3viathan
@MartijnPieters Cevabınız ile çalışmadığını görmüyorum. Soruda olduğu gibi tamsayılar vb. Için çalışır, ancak "foo"% doSomething% "bar", aynı TypeError'u yükseltir. – L3viathan
@ L3viathan: Hayır, burada biraz ileriye gidiyordum. Bu benim görüşüme göre Python'da bir hatadır. –