diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py index 0d38316b2..b102526aa 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py @@ -22,22 +22,25 @@ class Item(Declarative, ScrapedItem): return self.__class__.fields def __setattr__(self, name, value): - if not name.startswith('_'): - if name in self._fields.keys(): - self._values[name] = self._fields[name].assign(value) - else: - raise AttributeError(name) + if name.startswith('_'): + return object.__setattr__(self, name, value) + + if name in self._fields.keys(): + self._values[name] = self._fields[name].assign(value) else: - object.__setattr__(self, name, value) + raise AttributeError(name) def __getattribute__(self, name): - if not name.startswith('_') and name in self._fields.keys(): + if name.startswith('_'): + return object.__getattribute__(self, name) + + if name in self._fields.keys(): try: return self._values[name] except KeyError: return self._fields[name].default else: - return object.__getattribute__(self, name) + raise AttributeError(name) def __repr__(self): """