[Tutor] tkinter events: <B1-Motion>

Zsiros Levente zslevi at sch.bme.hu
Thu Aug 24 22:21:13 CEST 2006


If we're talking about data hiding, let me ask: why Python doesn't 
implement data hiding (I mean 'private' and 'protected')? I consider it 
a very important OOP feature, because that makes OOP different from 
structural programming.

Danny Yoo wrote:

>> def handler(event):
>>     if buttonpressed == 1 :
>>         /#if the mousebutton is pressed and moved, circles should 
>> appear, but they do not/
>>         can.create_oval(event.x-r, event.y-r, event.x+r, event.y+r, 
>> fill="orange")
>>     lab.config(text='buttonpressed=' + str(buttonpressed) )
>
>
>
> The variables of functions are normally independent of each other.  
> That is, if I have a function square():
>
> ##############
> def square(x):
>     y = x * x
>     return y
> ##############
>
> and if I have a function that uses square that itself has a 'y' 
> variable, I should not see interference:
>
> ##############
> def test():
>     y = 17
>     print "square of y is", square(y)
>     print "y itself is", y
> ##############
>
> This black-boxing is what allows us to write and reuse functions with 
> reckless abandon: their innards are meant not to interact with one 
> another.  This is a feature that you usually want to have.
>
>
> But for your purposes, you want some controlled form of leakage.  Use 
> 'global' for this purpose by declaring the shared variable at the head 
> of your functions.  Compare the results above to the ones below:
>
> #####################################
> def square(x):
>      global y
>      y = x * x
>      return y
>
> def test():
>     global y
>     y = 17
>     print "square of y is", square(y)
>     print "y itself is", y
> #####################################
>
> There's terse reference material here about global:
>
>     http://www.python.org/doc/ref/global.html#l2h-558
>
> It's idiomatic programming practice to limit the use of 'global' to 
> situations where it's necessary; using it in an uncontrolled way leads 
> to code that's difficult to read or reason with.  There are more 
> sophsticated ways to share variables between functions.  That being 
> said, though, the 'global' mechanism will probably be simplest for 
> your purposes.
>
>
> Good luck to you!




More information about the Tutor mailing list