list vs UserList y dict vs UserDict

Codificar este día, ¿cuál de los anteriores se prefiere y se recomienda (tanto en Python 2 como en 3) para subclasificar?

Leí que UserList y UserDict se introdujeron porque en la list anterior y dict no se podían list como subclases, pero como esto ya no es un problema, ¿se recomienda usarlos?

Dependiendo de su caso de uso, en estos días o bien la list subclases y dict directamente, o puede subclases collections.MutableSequence y collections. MutableMapping collections. MutableMapping ; estas opciones existen además de usar los objetos User* .

Los objetos de User* se han movido al módulo de collections en Python 3; pero cualquier código que usó aquellos en el stdlib de Python 2 se ha reemplazado con las clases base abstract collections.abc . Incluso en Python 2, UserList y UserDict son collections.* aumentadas collections.* implementaciones, la list métodos de adición y el dict proporcionan más allá de la interfaz básica.

Las clases de collections aclaran qué debe implementarse para que su subclase sea una implementación completa, y también le permiten implementar subconjuntos más pequeños (como collections.Mapping , implementación de una asignación de solo lectura o collections.Sequence para un objeto similar a una tupla ).

Las implementaciones de User* deben usar cuando necesite implementar todo más allá de la interfaz básica también; por ejemplo, si necesita admitir la adición, la clasificación, la inversión y el recuento como lo hace la list .

Para cualquier otra cosa, casi siempre es mejor utilizar las clases base abstractas de collections como base; los tipos incorporados están optimizados para la velocidad y no son tan fáciles de subclases. Por ejemplo, deberá anular casi todos los métodos de la list donde normalmente se devuelve una nueva list , para garantizar que se devuelva su subclase.

Solo si necesita crear un código que insista en usar una list o un objeto dict (probado mediante el uso de isinstance() está subclasificando los tipos y una opción a considerar. Esta es la razón por la que collections.OrderedDict es una subclase de dict , por ejemplo.

No ya no se les anima. No debe utilizar la clase UserDict ya que está en desuso . La documentación dice que solo puedes hacer una subclase de dict directamente. El módulo userdict se ha ido en Python 3.0