def make_dynamic_class(typename, field_names):
    if isinstance(field_names, basestring):
        field_names = field_names.replace(",", " ").split()
    field_names = map(str, field_names)
    safe_fields_names = map(_encode_property_name, field_names)
    attr = dict((safe_name, _property(name)) for name, safe_name in zip(field_names, safe_fields_names))
    attr['__doc__'] = typename
    attr['__identifier__'] = "dolphin"
    attr['__init__'] = _dynamic__init
    attr['__getitem__'] = lambda self, key: self.__dict__.get(key)
    attr['__setitem__'] = _dynamic__setitem
    attr['__iter__'] = lambda self: iter(self.__dict__)
    attr['__repr__'] = lambda self: "{%s}" % (', '.join([
                                                            "%s=%r" % (key, self[key]) for key in
                                                            sorted(self.__dict__.keys())
                                                            ]))
    return type(typename, (object,), attr)