def _init_fields(self):
fields = {}<EOL>forms = {}<EOL>sets = {}<EOL>for name in dir(self):<EOL><INDENT>if name.startswith('<STR_LIT:_>'):<EOL><INDENT>continue<EOL><DEDENT>field = getattr(self, name)<EOL>is_field = isinstance(field, Field)<EOL>is_form = isinstance(field, Form) or (<EOL>inspect.isclass(field) and issubclass(field, Form))<EOL>is_set = isinstance(field, FormSet)<EOL>if is_field:<EOL><INDENT>field = copy(field)<EOL>field.name = self._prefix + name<EOL>field.form = self<EOL>if field.prepare is None:<EOL><INDENT>field.prepare = getattr(self, '<STR_LIT>' + name, None)<EOL><DEDENT>if field.clean is None:<EOL><INDENT>field.clean = getattr(self, '<STR_LIT>' + name, None)<EOL><DEDENT>fields[name] = field<EOL>setattr(self, name, field)<EOL><DEDENT>elif is_form:<EOL><INDENT>forms[name] = field<EOL><DEDENT>elif is_set:<EOL><INDENT>field._name = self._prefix + name  <EOL>sets[name] = field<EOL><DEDENT><DEDENT>self._fields = fields<EOL>self._forms = forms<EOL>self._sets = sets<EOL>
Creates the `_fields`, `_forms` asn `_sets` dicts.

        Any properties which begin with an underscore or are not `Field`,
        `Form` or `FormSet` **instances** are ignored by this method.