Raymond Hettinger showed una manera genial para combinar las clases de colección:subclases de OrderedDict y defaultdict
from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
pass
# if pickle support is desired, see original post
Quiero hacer algo similar para OrderedDict y defaultdict. Pero, por supuesto, defaultdict tiene una firma diferente __init__
, por lo que requiere un trabajo adicional. ¿Cuál es la forma más limpia de resolver este problema? Yo uso Python 3.3.
He encontrado una buena solución aquí: https://stackoverflow.com/a/4127426/336527, pero estaba pensando que tal vez derivar de defaultdict podría hacer esto aún más simple?
Mientras estamos en el tema, puede alguien explicarme cómo el ejemplo OrderedDict realmente obtiene funcionalidad OrderedDict sin ninguna 'super'-delegación explícita a esa clase? ¿Es debido a llamadas 'super' en algún lugar dentro de' Counter' que se redirigen a través de 'OrderedDict' en lugar de ir a' dict' directamente como lo harían normalmente? O solo que? –
@KarlKnechtel Te refieres a 'OrderedCounter', pero es una buena pregunta. – agf
@agf er, sí, exactamente. Stupid edit timeout ... :( –