I have situation where (pseudo code):
class MyClass:
def __init___(self):
self.varA = [zza, b, c]
self.varB = [d, e, zzf]
def process(self):
You could write it like this:
class MyClass:
def __init___(self):
self.varA = [zza, b, c]
self.varB = [d, e, zzf]
def addZZ(varname):
_list = getattr(self, varname)
setattr(self, varname, ["zz" + w for w in _list if "zz" not in _list])
def process(self):
self.addZZ('varA')
self.addZZ('varB')
print self.varA, self.varB
Using setattr
and getattr
to access attributes by their names.
Also as the filter does not depend on the items but only the list. It can be hoisted out of the list comprehension and placed outside. It then becomes clear that if "zz"
is in the list that the list is emptied.
def addZZ(varname):
_list = getattr(self, varname)
if "zz" not in _list:
setattr(self, varname, ["zz" + w for w in _list])
else:
setattr(self, varname, [])