Search code examples
pythoninitializationsubclassingbuilt-in-types

Python built-in types subclassing


What's wrong with this code?

class MyList(list):
  def __init__(self, li): self = li

When I create an instance of MyList with, for example, MyList([1, 2, 3]), and then I print this instance, all I get is an empty list []. If MyDict is subclassing list, isn't MyDict a list itself?

NB: both in Python 2.x and 3.x.


Solution

  • You need to call the list initializer:

    class MyList(list):
         def __init__(self, li):
             super(MyList, self).__init__(li)
    

    Assigning to self in the function just replaces the local variable with the list, not assign anything to the instance:

    >>> class MyList(list):
    ...      def __init__(self, li):
    ...          super(MyList, self).__init__(li)
    ... 
    >>> ml = MyList([1, 2, 3])
    >>> ml
    [1, 2, 3]
    >>> len(ml)
    3
    >>> type(ml)
    <class '__main__.MyList'>