This is explained in "Special Method Lookup":
https://docs.python.org/3/reference/datamodel.html#special-method-lookup

Short version: For both correctness and performance, special methods (those
that begin and end with double underscores) are typically looked up on the
class, not the instance. If you want to override on a per-instance level,
have a non-special method that __str__ invokes, that can be overridden on a
per-instance basis.

On Sun, Feb 23, 2020 at 2:30 AM Jérôme Carretero <[email protected]>
wrote:

> Hello,
>
>
> I just noticed that calling `str(x)` is actually doing (in CPython
> `PyObject_Str`) `type(x).__str__(x)` rather than `x.__str__()`.
>
> Context: I wanted to override __str__ for certain objects in order to
> “see them better”.
>
> I'm wondering why not do `x.__str__()`
>
>
> Best regards,
>
> --
> Jérôme
> _______________________________________________
> Python-ideas mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/[email protected]/message/2VSTPAVKCN6SNOPJG6MOSIP7SDK4W66W/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/KX7KLQXXN4K2VN2GPMBNHPAUBVAVCEV7/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to