[issue42768] super().__new__() of list expands arguments

Richard Neumann report at bugs.python.org
Mon Dec 28 11:23:51 EST 2020


New submission from Richard Neumann <mail at richard-neumann.de>:

When sublassing the built-in list, the invocation of super().__new__ will unexpectedly expand the passed arguments:

class MyTuple(tuple):

    def __new__(cls, *items):
        print(cls, items)
        return super().__new__(cls, items)


class MyList(list):

    def __new__(cls, *items):
        print(cls, items)
        return super().__new__(cls, items)


def main():

    my_tuple = MyTuple(1, 2, 3, 'foo', 'bar')
    print('My tuple:', my_tuple)
    my_list = MyList(1, 2, 3, 'foo', 'bar')
    print('My list:', my_list)


if __name__ == '__main__':
    main()


Actual result:

<class '__main__.MyTuple'> (1, 2, 3, 'foo', 'bar')
My tuple: (1, 2, 3, 'foo', 'bar')
<class '__main__.MyList'> (1, 2, 3, 'foo', 'bar')
Traceback (most recent call last):
  File "/home/neumann/listbug.py", line 24, in <module>
    main()
  File "/home/neumann/listbug.py", line 19, in main
    my_list = MyList(1, 2, 3, 'foo', 'bar')
TypeError: list expected at most 1 argument, got 5


Expected:

<class '__main__.MyTuple'> (1, 2, 3, 'foo', 'bar')
My tuple: (1, 2, 3, 'foo', 'bar')
<class '__main__.MyList'> (1, 2, 3, 'foo', 'bar')
My list: [1, 2, 3, 'foo', 'bar']

----------
components: ctypes
messages: 383902
nosy: conqp
priority: normal
severity: normal
status: open
title: super().__new__() of list expands arguments
type: behavior
versions: Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue42768>
_______________________________________


More information about the Python-bugs-list mailing list