New submission from Kassym Dorsel: When __getattr__ is implemented without also implementing __copy__ and __deepcopy__ trying to (deep)copy the class fails.
>>> import copy >>> class foo(): ... def __getattr__(self, attr): ... return None ... >>> f = foo() >>> copy(f) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'module' object is not callable The copy module checks if a class has implemented __copy__ using hasattr: if hasattr(x, '__copy__'): ... An easy fix would be to use: if getattr(x, '__copy__', None): ... In Python 3 this change has already been made. ---------- components: Library (Lib) messages: 201024 nosy: Kassym.Dorsel, alexandre.vassalotti priority: normal severity: normal status: open title: Implementing __getattr__ breaks copy and deepcopy type: behavior versions: Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue19364> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com