[issue19364] Implementing __getattr__ breaks copy and deepcopy
Kassym Dorsel
report at bugs.python.org
Wed Oct 23 15:49:43 CEST 2013
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 <report at bugs.python.org>
<http://bugs.python.org/issue19364>
_______________________________________
More information about the Python-bugs-list
mailing list