New submission from Chinmay Kanchi <cgkan...@gmail.com>:

Attempting to override a special method of an object of a builtin (like list) 
raises an AttributeError. This is obviously by design. However, doing the same 
to a user-defined function object seemingly replaces the function, but does not 
have the expected effect. In the interests of consistency, attempting to change 
a special method of a function object should raise an AttributeError stating 
that the property/method is read-only.

>>> a_list = list()
>>> a_list.__repr__ = lambda: '[]'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object attribute '__repr__' is read-only

>>> def f(): pass
>>> f.__repr__ = lambda: 'f'
>>> f.__repr__
<function <lambda> at 0x6482b0>
>>> repr(f) #would expect it to return 'f' since no error was raised
'<function f at 0x6481f0>'
>>> f.__repr__() #so the change is half-way made, inconsistent and possibly 
>>> problematic
'f'
>>>

----------
components: Interpreter Core
messages: 123589
nosy: Chinmay.Kanchi
priority: normal
severity: normal
status: open
title: Attempting to override special methods of a function object does not 
cause an error
type: behavior
versions: Python 2.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue10649>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to