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.
--Dethe"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
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
