[Edu-sig] Gutless classes

Dethe Elza delza at livingcode.org
Fri Sep 9 19:50:20 CEST 2005

On 9-Sep-05, at 10:04 AM, David Handy wrote:

> I haven't yet found any need to change the method on a class, but I  
> have
> often written code that changes a method on an instance. Here's a  
> class that
> "runs" something, but it is an error to run it more than once:
> class RunOnce:
>     def run(self):
>         self.run = _noMoreRunning
>         # do other stuff that you only want to happen once
>     def _noMoreRunning(self):
>         raise Exception("Can only call run() once.")
> I prefer the pattern above to the alternative:
> class RunOnce:
>     def __init__(self):
>         self.__has_been_run_before = False
>     def run(self):
>         if self.__has_been_run_before:
>             raise Exception("Can only call run() once.")
>         self.__has_been_run_before = True
>         # do other stuff that you only want to happen once
> David H

Yes, this is called "trampoline style."  It can make code hard to  
read if it's over-used, but it's quite nice once in a while.  I tend  
to use this style more in Javascript than in Python, but not for any  
obvious reason.

I think the idea of changing a class after it has been defined is  
more for extending the class with additional methods, rather than  
changing the methods it has.  In Objective-C this type of extension  
is called a Category and it is explicitly supported by the language.   
The idea is that sometimes instead of subclassing, all you really  
want to do is add a couple of methods to an existing class.  In  
Objective-C you can only add methods, not properties, but in Python  
you can do both.


"No lesson seems to be so deeply inculcated by experience of life as  
that you should never trust experts.  If you believe doctors, nothing  
is wholesome; if you believe theologians, nothing is innocent; if you  
believe soldiers, nothing is safe."

         --Lord Salisbury, 19th century British prime minister

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2488 bytes
Desc: not available
Url : http://mail.python.org/pipermail/edu-sig/attachments/20050909/e1f0c5b7/smime.bin

More information about the Edu-sig mailing list