def __init__(self,
                 filename=None,
                 spec=CONFIG_SPEC_PATH,
                 options=None,
                 default_spec=None):
        """Initializer
        """
        super(Config, self).__init__()
        self.read_from_file = None
        self.filename = None

        # Merge specs, giving precedence to user spec, then, before_init_spec,
        # then default_spec
        if ((spec == self.CONFIG_SPEC_PATH and
             not os.path.isfile(self.CONFIG_SPEC_PATH))):
            spec = None

        user_spec_ohm = thread_first(spec, convert_spec, conf_to_ohm)
        before_init_spec_ohm = thread_first(self.DEFAULT_CONFIG,
                                            ohm_to_spec,
                                            convert_spec,
                                            conf_to_ohm)
        default_spec_ohm = thread_first(default_spec,
                                        convert_spec,
                                        conf_to_ohm)

        user_spec_ohm.merge(before_init_spec_ohm)
        user_spec_ohm.merge(default_spec_ohm)
        full_spec = ohm_to_spec_list(user_spec_ohm)

        # Load the configuration and overload it with the options
        if filename is not None:
            self.load(filename,
                      full_spec,
                      options)
        else:
            self.base = configobj.ConfigObj()

        # Unless the options are already there, overload them with the defaults
        # set before initialization
        for key, value in self.DEFAULT_CONFIG.items():
            if self not in key:
                self[key] = value
dataset/ETHPy150Open duerrp/pyexperiment/pyexperiment/Config.py/Config.__init__/swapped operands of `not in`