Help me pick an API design (OO vs functional)

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Mar 26 08:59:58 EDT 2013


On Tue, 26 Mar 2013 05:04:43 -0700, Michael Herrmann wrote:

> On Tuesday, March 26, 2013 11:26:30 AM UTC+1, Dave Angel wrote:
>> ...
>> Seems to me that the official interface should all be methods. 
>> However, you could have a new object which always represents the
>> "focus" window.
>>   Then the USER could define trivial functions:
>> 
>> def write(*args):
>>      focused.write(*args)
> 
> It's an interesting idea. But why not give this write(...) to them in
> the first place? Am I the only one who appreciates the simplicity of
> 
>         start("Notepad")
>         write("Hello World!")
>         press(CTRL + 's')
>         write("test.txt", into="File name")
>         click("Save")
>         press(ALT + F4)
> 
> over
> 
>         notepad = start("Notepad")
>         notepad.write("Hello World!")
>         notepad.press(CTRL + 's')
>         notepad.write("test.txt", into="File name")
>         notepad.click("Save")
>         notepad.press(ALT + F4)?

You are not the only one.

I suggest that you have a set of functions that work on "the current 
window", whatever that is. Preferably there should always be a current 
window, but if not, ensure that you give a clear error message.

Then you have syntax for operating on any named(?) window. So a user can 
implicitly operate on the current window:

select(notepad)
write("goodbye cruel world")
save()

or explicitly on any window they like:

excel.quit()


I suggest you dig up an old book on "Hypercard", for Apple Macs in the 
1980s and 90s. Back in the day, Macs could only run a single application 
at a time, and Hypercard was limited to a single window at a time (called 
a "stack"). But that stack (think: window) could have multiple 
"cards" (think: window tabs), one of which was always current. 
Hypercard's built-in programming language Hypertalk let you do things 
like this:


go to stack "Notepad"
type "goodbye cruel world" in field "main" of card 7
click button "Save"

click button "Quit" of card "Main" of stack "Excel"


(more or less... it's been a few years since I've had a classic Mac 
capable of running Hypercard.)




-- 
Steven



More information about the Python-list mailing list