New submission from Michael Foord: Reported as mock issue 221: http://code.google.com/p/mock/issues/detail?id=221
>>> from unittest.mock import Mock >>> m = Mock() >>> m.foo = 3 >>> del m.foo >>> m.foo = 4 >>> del m.foo Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/compile/py3k-cpython/Lib/unittest/mock.py", line 687, in __delattr__ raise AttributeError(name) AttributeError: foo Suggested change: Previous: def __delattr__(self, name): if name in _all_magics and name in type(self).__dict__: delattr(type(self), name) if name not in self.__dict__: # for magic methods that are still MagicProxy objects and # not set on the instance itself return if name in self.__dict__: object.__delattr__(self, name) obj = self._mock_children.get(name, _missing) if obj is _deleted: raise AttributeError(name) if obj is not _missing: del self._mock_children[name] self._mock_children[name] = _deleted Change: def __delattr__(self, name): if name in _all_magics and name in type(self).__dict__: delattr(type(self), name) if name not in self.__dict__: # for magic methods that are still MagicProxy objects and # not set on the instance itself return obj = self._mock_children.get(name, _missing) if name in self.__dict__: object.__delattr__(self, name) elif obj is _deleted: raise AttributeError(name) if obj is not _missing: del self._mock_children[name] self._mock_children[name] = _deleted Incidentally the if ‘obj is not _missing’ line seems superfluous. ---------- assignee: michael.foord messages: 208019 nosy: michael.foord priority: normal severity: normal stage: needs patch status: open title: Allow repeated deletion of unittest.mock.Mock attributes type: behavior versions: Python 3.3, Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue20239> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com