Robert Kern wrote:
Steven Bethard wrote:

Sorry, I also meant to add that the other obvious way of dealing with this kind of thing is to make the results keyword parameters:

def get_connection(GOOD=1, BAD_AUTH=2, NO_SERVER=3):
    if tcp_conn():
        if server_allows_conn():
            return GOOD
        else:
            return BAD_AUTH
    else:
        return NO_SERVER

This has the benefit that if your user wants different return values they can specify them, but the disadvantage that someone improperly calling the function with more than 0 parameters will get, instead of an error message, a strange return value.


Another disadvantage is that one must compare the return value by value and not by name. That is, I cannot do something like this:

code = get_connection()
if code == NO_SERVER:
    ...

Good point. The class-type implementation does allow you to do this:

>>> class get_connection(object):
...     GOOD = 1
...     BAD_AUTH = 2
...     NO_SERVER = 3
...     def __new__(cls):
...         if tcp_conn():
...             if server_allows_conn():
...                 return cls.GOOD
...             else:
...                 return cls.BAD_AUTH
...         else:
...             return cls.NO_SERVER
...
>>> get_connection.GOOD
1
>>> get_connection.BAD_AUTH
2
>>> get_connection.NO_SERVER
3

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to