Extending classes __init__behavior for newbies

James Mills prologic at shortcircuit.net.au
Mon Feb 14 18:46:24 EST 2011


On Tue, Feb 15, 2011 at 9:32 AM, rantingrick <rantingrick at gmail.com> wrote:
> In any event, normally i would expect people to use a bit of common
> sense when wielding an interface ESPECIALLY when they wrote it! Like
> for instance... If i gave someone a loaded gun i would not bother
> telling that person "Hey, don't aim the gun at your foot and then pull
> the trigger because you could blow your pinky toe off"... no, i would
> expect them to have enough sense not to do such a stupid thing.
> However, if they *did* happen to blow their pinky toe off i really
> would not get too upset about it. After all, i've always believed that
> stupidity should be painful.

This reminds me of "good engineering practise" where you
let the error occur where it lay.

Example:

>>> def f(a):
...     return a + 1
...
>>> f(1)
2
>>> def g(*args):
...     if len(args) == 1:
...             return args[0] + 1
...     else:
...             raise Exception("Invalid arguments")
...
>>> g(1)
2
>>> g()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in g
Exception: Invalid arguments
>>> g(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in g
Exception: Invalid arguments
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 1 argument (0 given)
>>> f(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 1 argument (2 given)
>>>

In that sense, you "trust" that the programmer using
your API(s) has read "documentation" and/or "source code"
and "understands" how to "correctly" use the API(s).

If the programmer doesn't use the API(s) "correctly"
f(...) will blow up in his/her face. g(...) will blow up as well
but tries to guard against the expected TypeError you
would expect if you called f(...) incorrectly.

cheers
James

-- 
-- James Mills
--
-- "Problems are solved by method"



More information about the Python-list mailing list