【问题标题】:dynamic attribute within class类内的动态属性
【发布时间】:2021-03-12 00:30:15
【问题描述】:

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

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 中的属性?我该如何处理?

【问题讨论】:

    标签: python


    【解决方案1】:

    你可以这样写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2019-05-02
      • 2013-07-12
      • 2023-03-22
      • 2015-06-21
      • 1970-01-01
      相关资源
      最近更新 更多