David wrote:

class MyClass_2(object):
   def __new__(self, condition):
        if condition:
              return object.__new__(self)
        else:
              return None

[...]
Spot on. It would require two "if" tests, one inside __new__() and
another in the code.

You will always need at least two if tests: once in the function producing the result ("does the test succeed? if not, return this instead...") and once in the code using the result ("did the magic value get returned?").

Consider str.find()... the caller has to check whether it returns -1, but the find method itself has to check whether the search string is found or not, and return -1 if it is not. This may or may not require a *literal* if statement, but there's still an implied test in the code.


I found your mention of try/except there especially helpful, because
it was a pertinent reminder that I was not thinking in "ask forgiveness
not permission" mode. This (newbie mistake) occurred because I
wanted my application to continue, not abort with an exception, but
after your prompt I recalled that "except" doesn't have to raise exceptions
it can do other things.

Fair enough, and arguably having the class raise an exception is a better design, but with all the people saying your original design was "too clever", I'd like to give it some love :) I think the design is just clever enough. I would consider using it if I were designing something like the regular expression match and search methods, which return None if the regex doesn't match.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to