On Thu, 22 Dec 2022 at 03:41, Christopher Barker <python...@gmail.com> wrote:
>
> On Wed, Dec 21, 2022 at 1:18 AM Steven D'Aprano <st...@pearwood.info> wrote:
>>
>> On Tue, Dec 20, 2022 at 11:55:49PM -0800, Jeremiah Paige wrote:
>> >     @property
>> >     def data(self):
>> >         return f"{self}"
>>
>> By my testing, on Python 3.10, this is slightly faster still:
>>
>>     @property
>>     def data(self):
>>         return "".join((self,))
>
>
> 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'

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__().

>>> f"{s:s}"
repr!
SPAM
>>> f"{s:1s}"
repr!
SPAM
>>> f"{s:14s}"
'ham           '

Curiouser and curiouser. Especially since the returned strings aren't
enclosed in quotes. Let's try something.

>>> format(s, "10s") is s
False
>>> format(s, "s") is s
True
>>> format(s) is s
str!
False

Huh. How about that.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/MJEMRGGUMAFP5W2FSRZJXG7MPWNN44GU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to