New submission from Vanshaj Singhania :
The documentation for the `str` class[^1] says:
> If neither encoding nor errors is given, str(object) returns object.__str__()
This led our students[^2] to try the following code:
>>> class Test:
... def __str__(self):
... return 'hi'
...
>>> test = Test()
>>> test.__str__ = lambda self: 'bye'
>>> str(test)
The expected result was calling `test.__str__()`, but instead the interpreter
output was `'hi'`.
The docs for special method lookup[^3] do say that instance attributes are
ignored:
> For custom classes, implicit invocations of special methods are only
> guaranteed to work correctly if defined on an object’s type, not in the
> object’s instance dictionary.
This makes sense, and explains the observed behavior, but the `str` class docs
seem to be inconsistent with this. Perhaps it would be more clear if the `str`
documentation mentioned that it called `type(object).__str__()` instead of
`object.__str__()`.
[^1]: https://docs.python.org/3/library/stdtypes.html#str
[^2]: CS 61A at UC Berkeley, https://cs61a.org
[^3]: https://docs.python.org/3/reference/datamodel.html#special-method-lookup
--
assignee: docs@python
components: Documentation
messages: 415110
nosy: docs@python, itsvs
priority: normal
severity: normal
status: open
title: [doc] str docs are inconsistent with special method lookup
type: enhancement
versions: Python 3.10, Python 3.11, Python 3.9
___
Python tracker
<https://bugs.python.org/issue47007>
___
___
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com