类内的动态属性

2024-06-25 23:59:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到的情况是(伪代码):

class MyClass:
   def __init___(self):
      self.varA = [zza, b, c]
      self.varB = [d, e, zzf]
   def process(self):
      self.varA = ["zz" + w for w in self.varA if "zz" not in self.varA]
      self.varB = ["zz" + w for w in self.varB if "zz" not in self.varB]
      print varA, varB

我想要的是更优雅的东西,我可以通过定义将变量传递给进程:

class MyClass:
   def __init___(self):
      self.varA = [zza, b, c]
      self.varB = [d, e, zzf]
   def addZZ(list):
      return list = ["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

但这意味着它必须在def中动态更改属性?我怎样才能接近它


Tags: inselfforifinitdefmyclassnot
1条回答
网友
1楼 · 发布于 2024-06-25 23:59:39

你可以这样写:

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

使用setattrgetattr按名称访问属性

同样,过滤器不依赖于项目,而只依赖于列表。可以从列表中吊出,放在外面。然后很明显,如果"zz"在列表中,那么该列表将被清空

   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, [])

相关问题 更多 >