Subclassing dict: deveria ditar .__ init __ () ser chamado?

Aqui está uma questão dupla, com uma parte teórica e uma prática:

Quando subclassing dict:

class ImageDB(dict):
    def __init__(self, directory):
        dict.__init__(self)  # Necessary?? 
        ...

devemosdict.__init__(self) ser chamado, assim como uma medida de "segurança" (por exemplo, no caso de haver alguns detalhes de implementação não-triviais que importam)? existe o risco de o código romper com uma versão futura do Python sedict.__init__() énão chamado? Eu estou procurando uma razão fundamental para fazer uma coisa ou outra, aqui (praticamente chamandodict.__init__() é seguro).

Meu palpite é que quandoImageDB.__init__(self, directory) é chamado, o self já é um novo objeto dict vazio e, portanto, não há necessidade de chamardict.__init__ (Eu quero que o dict seja vazio, no começo). Isso está correto?

Editar:

A questão mais prática por trás da questão fundamental acima é a seguinte. Eu estava pensando em subclassing dict porque eu usaria a sintaxe do banco de dados […] com bastante frequência (ao invés de fazer db.contents [...] o tempo todo); os únicos dados do objeto (atributo) são realmente um ditador. Eu quero adicionar alguns métodos para o banco de dados (comoget_image_by_name()ouget_image_by_code(), por exemplo), e apenas substituir o__init__(), porque o banco de dados de imagens é definido pelo diretório que o contém.

Em suma, a questão (prática) poderia ser: o que é uma boa implementação para algo que se comporta como um dicionário, exceto que sua inicialização é diferente (leva apenas um nome de diretório), e que possui métodos adicionais?

"Fábricas" foram mencionadas em muitas respostas. Então eu acho que tudo se resume a: você subclasse dit, override__init__() e adicionar métodos, ou você escreve uma função (de fábrica) que retorna um dict, ao qual você adiciona métodos? Eu estou inclinado a preferir a primeira solução, porque a função de fábrica retorna um objeto cujo tipo não indica que tem semântica e métodos adicionais, mas o que você acha?

Editar 2:

Eu entendo da resposta de todos que não é uma boa idéia subclassificar ditto quando a nova classe "não é um dicionário", e em particular quando__init__ método não pode ter os mesmos argumentos que os ditames__init__ (que é o caso da "questão prática" acima). Em outras palavras, se eu entendi corretamente, o consenso parece ser: quando você subclasse, todos os métodos (incluindo a inicialização) devem ter a mesma assinatura que os métodos da classe base. Isso permite que isinstance (subclass_instance, dict) garanta quesubclass_instance.__init__() pode ser usado comodict.__init__(), por exemplo.

Outra questão prática surge: como uma classe que é igual a dict, exceto pelo seu método de inicialização, deve ser implementada? sem subclassificação? isso exigiria algum código chato, não?

questionAnswers(4)

yourAnswerToTheQuestion