私はやってみたい:__rmod__を使ってstrの%動作を上書きすることはできますか?
行うのに十分に簡単ですx %doSomething% y
STRはxの場合を除き、任意のxとyのいずれかのために(以下のコードを参照してください)。
(1%doSomthingがTypeErrorで失敗するのと同様に)古いスタイルの文字列の書式設定を失敗させ、doSomethingで定義されている__rmod__メソッドに戻す方法はありますか(特別なメソッドを追加する、オブジェクト?
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
明快にするには: "foo"%doSomething% "bar" 'は' 'foobar" 'を返しますか? 'str .__ mod__'は' NotImplemented'を返すのではなく 'TypeError'を発生させるので、これは不可能だと私は信じています。 – L3viathan
@MartijnPieters私はあなたの答えで働いているとは思わない。それは問題のように整数などで動作しますが、 '' foo "%doSomething%" bar "'は同じTypeErrorを発生させます。 – L3viathan
@ L3viathan:いいえ、私はここで少し先に進んでいました。これは実際にはPythonのバグです、私の意見です。 –