inventshah · GitHub

Bug report

Bug description:

In the 3.15 alphas, the + operator does not dispatch to obj.__radd__ when the left hand object inherits from a sequence like class (list, tuple, ...), but does if it is a base instance.

class A:
    def __radd__(self, other): ...
class B(tuple): ...
() + A()  # No error
B() + A() # TypeError: can only concatenate tuple (not "A") to tuple

I originally ran into the issue with a NamedTuple, but looks like subclasses of array.array, bytearray, bytes, collections.deque, list, str, and tuple all raise the error.

Works in 3.14.3. git bisect'd to e6e376a , so something in the resolution between nb_add and sq_concat may have changed while optimizing (* has a similar problem with __rmul__ mapping to nb_multiply and sq_repeat).

CPython versions tested on:

CPython main branch

Operating systems tested on:

macOS

Linked PRs

Read the original on github.com ↗