delete a methode of a object?

Erik Max Francis max at alcyone.com
Wed Oct 9 09:57:14 CEST 2002


Thomas Marek wrote:

> is it possible to delete a method of a object?

For a typical instance of a class, not in a direct way that's
instance-specific.  For your standard instance of a class, the method is
not in the instance's dictionary, it's in the dictionary of the class:

>>> class C:
...  def f(self, x):
...   print x
... 
>>> c = C()
>>> c.f(2)
2
>>> del c.f # the method isn't in the instance
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: C instance has no attribute 'f'
>>> del C.f # it's here in the class
>>> c.f(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: C instance has no attribute 'f'

But that would affect all other instances.  If you want
instance-specific removal of methods, the most obvious solution to me is
simply attaching a callable attribute that raises an AttributeError:

>>> def duh(x): raise AttributeError          
... 
>>> c.f = duh
>>> c.f(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 1, in duh
AttributeError

-- 
 Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
 __ San Jose, CA, USA / 37 20 N 121 53 W / &tSftDotIotE
/  \ My heart is pure as the driven slush.
\__/ Tallulah Bankhead
    HardScience.info / http://www.hardscience.info/
 The best hard science Web sites that the Web has to offer.



More information about the Python-list mailing list