[Python-ideas] func attribute & default arg
Nick Coghlan
ncoghlan at gmail.com
Sun May 17 02:32:32 CEST 2009
spir wrote:
> Le Sat, 16 May 2009 17:53:09 +1000, Nick Coghlan <ncoghlan at gmail.com>
> s'exprima ainsi:
>
>> Since option 1 will work for any arbitrary object, while option 2
>> is limited to objects which support copy.copy (or copy.deepcopy,
>> depending on the copying semantics chosen), the "late evaluation of
>> default arguments" (option 1) approach is the more promising angle
>> of attack by far.
>
> Which objects do not support copy.deepcopy? Really surprised. I used
> and still use it in personal projects for rather complicated custom
> objects* and it works as expected.
Bound methods for one:
>>> class C(object):
... def m(): pass
...
>>> copy.copy(C().m)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/copy.py", line 95, in copy
return _reconstruct(x, rv, 0)
File "/usr/lib/python2.5/copy.py", line 322, in _reconstruct
y = callable(*args)
File "/usr/lib/python2.5/copy_reg.py", line 92, in __newobj__
return cls.__new__(cls, *args)
TypeError: instancemethod expected at least 2 arguments, got 0
>>> copy.deepcopy(C().m)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/copy.py", line 189, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python2.5/copy.py", line 322, in _reconstruct
y = callable(*args)
File "/usr/lib/python2.5/copy_reg.py", line 92, in __newobj__
return cls.__new__(cls, *args)
TypeError: instancemethod expected at least 2 arguments, got 0
Copyability really can't be assumed for Python objects - the copy module
does an excellent job of making it "just work" for most objects, but it
really isn't any more fundamental a property than being hashable.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
More information about the Python-ideas
mailing list