Can't do a multiline assignment!

Arnaud Delobelle arnodel at googlemail.com
Thu Apr 17 12:46:14 EDT 2008


On Apr 17, 5:19 pm, s0s... at gmail.com wrote:
> On Apr 17, 10:54 am, colas.fran... at gmail.com wrote:
>
> > On 17 avr, 17:40, s0s... at gmail.com wrote:
>
> > Out of sheer curiosity, why do you need thirty (hand-specified and
> > dutifully commented) names to the same constant object if you know
> > there will always be only one object?
>
> I'm building a web server. The many variables are names of header
> fields. One part of the code looks like this (or at least I'd like it
> to):
>
> class RequestHeadersManager:
>
>     # General header fields
>     Cache_Control               = \
>     Connection                  = \
>     Date                        = \
>     Pragma                      = \
>     Trailer                     = \
>     Transfer_Encoding           = \
>     Upgrade                     = \
>     Via                         = \
>     Warning                     = \
>
>     # Request header fields
>     Accept                      = \
>     Accept_Charset              = \
>     Accept_Encoding             = \
>     Accept_Language             = \
>     Authorization               = \
> ...
>
> Etc etc etc. At the end they'll all be assign to None. Then, when
> initialized, __init__() will the the string of headers, parse them,
> and use those variables shown above to assign to the header values. Of
> course a normal request won't include all of those headers, so the
> others will remain None. That's what I want.

Why not do something like:

class RequestHeadersManager:

    def __init__(self, string):
        self._fields = {}
        # Populate self.fields with fields defined in 'string'

    def __getitem__(self, fieldname):
        return self._fields.get(fieldname, None)

This way you don't need to prebind all possible fields to None, and a
field is accessible by its actual name, which should be easier to
remember than an identifier derived from a field name.  Moreover you
can more easily do some group manipulation of fields (e.g. print them
all

    def print_fields(self):
        for name, value in self._fields.iteritems():
            print "%s: %s" % (name, value)
)

--
Arnaud




More information about the Python-list mailing list