Equivalent to C bitmasks and enumerations

Wojtek Walczak gminick at bzt.bzt
Thu Apr 16 00:39:29 CEST 2009


On Wed, 15 Apr 2009 12:51:31 +0200, Ulrich Eckhardt wrote:

Hi,

> I'm currently using Python to implement a set of tests for code that is
> otherwise written in C. This code was wrapped using Boost.Python and is
> then loaded into Python as module.
...
> What I'm looking for is a suggestion how to handle this in Python. Note that
> technically, this works without problem, I'm rather looking for stylistic
> advise. What I currently have is these (note: I'm retyping this, so ignore
> any syntax errors, please):
...
> Any other suggestions how to structure this or rewrite this?

It's not exactly what you're searching for, but with a bit of work
it should fit your needs:

---------
class Colors(object):
   def __init__(self):
      self.colors_reg = {}
      self.colors_set = 0

   def register_color(self, name):
      self.colors_reg.setdefault(name, 1 << len(self.colors_reg))

   def set_color(self, name):
      self.colors_set |= self.colors_reg[name]

   def has_color(self, color):
      return bool(self.colors_reg[color]&self.colors_set)

   def status_as_string(self, st):
      tmp = []
      for k in self.colors_reg:
         if st & self.colors_reg[k]:
            tmp.append(k)
      return '|'.join(tmp)


c = Colors()
# register your colors
c.register_color('RED')
c.register_color('BLUE')
c.register_color('YELLOW')

# set colors 'on'
c.set_color('RED')
c.set_color('YELLOW')

print c.has_color('RED')
print c.has_color('BLUE')
print c.status_as_string(5)
--------

HTH,
-- 
Regards,
Wojtek Walczak,
http://tosh.pl/gminick/



More information about the Python-list mailing list