for propertyname in [ propname for propname in self.__multilingualproperties__.keys() if self.__multilingualproperties__[propname][1] == True ]: attname = '__' + propertyname + '_' + lang if hasattr(self, attname): delattr(self, attname)
As you see on the last line, I'm doing a hasattr() on an attribute who's name starts with 2 underscores, and it works fine in this case (has been for weeks, if not months).
But do those names *end* with underscores as well?
(snip) Oops, sent too quickly; actually it looks to me like they don't (unless lang ends in "__"). However, it's not clear what "it works" means. Your code above won't raise any exceptions, but it shouldn't delete any attributes either :-)
class Foo: .... def __init__(self): .... self.__blech = 1 .... self.__blah__ = 1 .... self._bloop = 1 .... def do(self): .... print hasattr(self, "__blech") .... print hasattr(self, "_Foo__blech") .... print hasattr(self, "__blah__") .... print hasattr(self, "_bloop") .... x = Foo() x.do() False True True True
-- Paul Winkler http://www.slinkp.com