>>> class MyInt(int):
... def __rmod__(self, other):
... return 42
...
>>> class MyStr(str):
... def __rmod__(self, other):
... return 'wat'
...
>>> 0 % MyInt()
42
>>> '%r' % MyStr()
"''"
Warum ist die int
Unterklasse der Lage, diese BinOp von der reflektierten Seite zu kontrollieren, aber str
nicht? Dies scheint dem dokumentierten datamodel zu widersprechen.Warum funktioniert __rmod__ nicht richtig für Strings?
Ich hatte gehofft, um die Funktion zu verwenden, um eine nicht-intrusive und rückwärtskompatible Erweiterung bietet geschweiften Klammern-Stil-Handler/Formatierer für die logging
Rahmen zu schaffen, aber das hielt mich in meinen Tracks. Ist das ein Fehler?
[This] (https://bugs.python.org/issue28598) scheint relevant. – vaultah
Python 3.6.0 unter Linux. 'collections.UserString' als Basis hat auch das Problem. 'Bytes' als Basis nicht. – wim