
On Wed, Dec 21, 2022 at 8:54 AM Chris Angelico <rosuav@gmail.com> wrote:
I think both of those will call self.__str__, which creates a recursion -- that's what I'm trying to avoid.
I'm sure there are ways to optimize this -- but only worth doing if it's worth doing at all :-)
Second one doesn't seem to.
class Str(str): ... def __str__(self): ... print("str!") ... return "spam" ... def __repr__(self): ... print("repr!") ... return "SPAM" ... s = Str("ham") f"{s}" str! 'spam' "".join((s,)) 'ham'
hmm -- interesting trick -- I had jumped to that conclusion -- I wonder what it IS using under the hood? Interestingly, neither does the f-string, *if* you include a format
code with lots of room. I guess str.__format__ doesn't always call __str__().
Now that you mention that, UserString should perhaps have a __format__, More evidence that it's not really being maintained. Though maybe not -- perhaps the inherited one will be fine. Now that I think about it, perhaps the inherited __str__ would be fine as well. -CHB -- Christopher Barker, PhD (Chris) Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython