This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author conqp
Recipients conqp
Date 2020-12-28.16:23:51
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1609172631.57.0.956527842974.issue42768@roundup.psfhosted.org>
In-reply-to
Content
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']
History
Date User Action Args
2020-12-28 16:23:51conqpsetrecipients: + conqp
2020-12-28 16:23:51conqpsetmessageid: <1609172631.57.0.956527842974.issue42768@roundup.psfhosted.org>
2020-12-28 16:23:51conqplinkissue42768 messages
2020-12-28 16:23:51conqpcreate