On Tuesday, March 26, 2013 11:37:23 PM UTC+1, Steven D'Aprano wrote:
>
> Global *variables* are bad, not global functions. You have one global
> variable, "the current window". So long as your API makes it obvious when
> the current window changes, implicitly operating on the current window is
> no more dangerous than Python's implicit operations on the current
> namespace (e.g. "x = 2" binds 2 to x in the current namespace).
I'm generally wary of everything global, but you're right as long as no
(global) state is involved.
> I recommend you look at the random.py API. You have a Random class, that
> allows the user to generate as many independent random number generators
> as needed. And the module also initialises a private instance, and
> exposes the methods of that instance as top-level functions, to cover the
> 90% simple case where your application only cares about a single RNG.
I looked it up - I think this is a very good approach; to provide easy access
to the functionality used in 90% of cases but still give users the flexibility
to cover the edge cases.
After everybody's input, I think Design #2 or Design #4 would be the best fit
for us:
Design #2:
notepad_1 = start("Notepad")
notepad_2 = start("Notepad")
switch_to(notepad_1)
write("Hello World!")
press(CTRL + 'a', CTRL + 'c')
switch_to(notepad_2)
press(CTRL + 'v')
Design #4:
notepad_1 = start("Notepad")
notepad_2 = start("Notepad")
notepad_1.activate()
write("Hello World!")
press(CTRL + 'a', CTRL + 'c')
notepad_2.activate()
press(CTRL + 'v')
Normally, I'd go for Design #4, as it results in one less global, is better for
autocompletion etc. The thing with our library is that it tries to make its
scripts as similar as possible to giving instructions to someone looking over
their shoulder at a screen. And in this situation you would just say
activate(notepad)
rather than
notepad.activate().
So the problem lies in a difference between Python's and English grammar. For
beauty, I should go with #2. For pragmatism, I should go with #4. It hurts, but
I'm leaning towards #4. I have to think about it a little.
Thank you so much to everybody for your inputs so far!
Best,
Michael
www.getautoma.com
--
http://mail.python.org/mailman/listinfo/python-list