Good point, Benjamin. I didn't think of testing on Jython before answering. For practical purposes it's a really good idea to test obscure features against all potential target platforms.

In this case, I would argue that**Benjamin's test demonstrates a bug in Jython.

One could counter by pointing out that the documentation does not specify that the __defaults__ attribute is writable. However, in that case, Jython should explicitly make that attribute read only (as well as any other magic attributes where modification is silently ignored). That way, at least it would raise an exception in Jython.

Therefore, I would also suggest that the behavior of writable magic attributes should be added to the documentation and the python test suite.

On the other hand, if for some reason it is decided that support for such functionality is not desired in Python, then write access to such attributes should be deprecated and later removed. However, I happen to like the ability to do this kind of thing, so I would vote for specifying the current CPython 3 behavior (as demonstrated in Steven's initial post) in the Python documentation.

On 4/24/2011 10:02 AM, Benjamin Kaplan wrote:
On Sun, Apr 24, 2011 at 5:58 AM, Steven D'Aprano
<steve+comp.lang.pyt...@pearwood.info>  wrote:
Consider this in Python 3.1:


def f(a=42):
...     return a
...
f()
42
f.__defaults__ = (23,)
f()
23


Is this an accident of implementation, or can I trust that changing
function defaults in this fashion is guaranteed to work?



--
Steven
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_24
Type "help", "copyright", "credits" or "license" for more information.
def f(a=42) :
...    return a
...
f()
42
f.__defaults__ = (23,)
f()
42

I'm going to go with implementation detail.

--
http://mail.python.org/mailman/listinfo/python-list


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to