Ugly modification of a class, can it be done better ?
Albert van der Horst
albert at spenarnc.xs4all.nl
Sun May 23 12:07:44 EDT 2010
In article <4bf5e19e$0$27861$c3e8da3 at news.astraweb.com>,
Steven D'Aprano <steve at REMOVE-THIS-cybersource.com.au> wrote:
>Sorry for breaking threading, but Stef's original post has not come
>through to me.
>
>> On Thu, May 20, 2010 at 8:13 PM, Stef Mientki <stef.mientki at gmail.com>
>> wrote:
>
>>> So I want to change the behavior of the class dynamically. I've done it
>>> by adding a global variable (Base_Grid_Double_Click) in the module,
>>> initial set to None,
>>> but can be changed by the main program to some callback function. (see
>>> the code below)
>
>How is this supposed to work? If you have *one* global, then *every*
>instance will see the same setting. To change it dynamically, you enter a
>nightmare world of having to save the global, modify it, then restore it,
>every single time. Trust me, I've been there, this is the *worst* way of
>programming. This is why object oriented inheritance was invented, to
>escape this nonsense!
>
>The first thing is to make the callback specific to the class, not
>global. Why does your printing code need access to the callback that
>handles double-clicking on a grid? It doesn't! So don't give it that
>access (at least, not easy access). Put the callback in the class.
>
>class MyClass:
> callback = None
> def method(self, *args):
> if self.callback is None:
> behaviour_with_no_callback()
> else:
> behaviour_with_callback()
>
>
>Now if you want to apply a callback to some instances, and not others, it
>is totally simple:
>
>
>red = MyClass()
>blue = MyClass()
>red.callback = my_callback_function
>
>and you're done.
Don't go overboard in complication.
Python can handle variable functions just fine, if that is the
proper solution to your problem. (In c they are called function
pointers and they are unruly.)
def a(b,c): return b+c
def p(q,r): return q*r
x=a
x(3,5)
8
x=p
x(3,5)
15
<SNIP>
>--
>Steven
Sorry, but couldn't respond to the original message.
My newsserver doesn't have it anymore.
Groetjes Albert
--
--
Albert van der Horst, UTRECHT,THE NETHERLANDS
Economic growth -- being exponential -- ultimately falters.
albert at spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst
More information about the Python-list
mailing list