Subclassing dict: should dict.__init__() be called?

You should probably call dict.__init__(self) when subclassing; in fact, you don’t know what’s happening precisely in dict (since it’s a builtin), and that might vary across versions and implementations. Not calling it may result in improper behaviour, since you can’t know where dict is holding its internal data structures.

By the way, you didn’t tell us what you want to do; if you want a class with dict (mapping) behaviour, and you don’t really need a dict (e.g. there’s no code doing isinstance(x, dict) anywhere in your software, as it should be), you’re probably better off at using UserDict.UserDict or UserDict.DictMixin if you’re on python <= 2.5, or collections.MutableMapping if you’re on python >= 2.6 . Those will provide your class with an excellent dict behaviour.

EDIT: I read in another comment that you’re not overriding any of dict’s method! Then there’s no point in subclassing at all, don’t do it.

def createImageDb(directory):
    d = {}
    # do something to fill in the dict
    return d

EDIT 2: you want to inherit from dict to add new methods, but you don’t need to override any. Than a good choice might be:

class MyContainer(dict):
    def newmethod1(self, args):
        pass

    def newmethod2(self, args2):
        pass


def createImageDb(directory):
    d = MyContainer()
    # fill the container
    return d

By the way: what methods are you adding? Are you sure you’re creating a good abstraction? Maybe you’d better use a class which defines the methods you need and use a “normal” dict internally to it.

Factory func:
http://en.wikipedia.org/wiki/Factory_method_pattern

It’s simply a way of delegating the construction of an instance to a function instead of overriding/changing its constructors.

Leave a Comment