代码之家  ›  专栏  ›  技术社区  ›  pashadia

从变量中对新对象调用方法

  •  0
  • pashadia  · 技术社区  · 7 年前

    我有一个包含列表和一些布尔方法的类。

    class Cls:
        data = [] // populated in __init__()
    
    
        def flag1(self):
        def flag2(self):
        def flag3(self): # these all return booleans, based on the data
    

    def hof(self, fn):
      count = 0
      for i in range(1, 10):
        new_obj = Cls(self.data+i)
        if new_obj.fn():
          count +=1  
    

    有没有办法在不将所有标志转换为静态方法的情况下实现这一点?

    === 编辑:以一种非常黑客的方式使其工作:

    class Cls:
      data = []
      def __init__(self):
        self.data = value
      class flag1(self):
        return True
      class flag2(self):
        return False
    
      # The hackish part
      flag_dict = {
        1: flag1,
        2: flag2,
      }
      def hof(self, flag):
        count = 0
        for i in range(1,10):
          new_obj = Cls(self.data + [i])
          if self.flag_dict[flag](new_obj):
            count +=1
        return count
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   mwchase    7 年前

    instance.hof(Cls.flag1) ,并在内部将其写成 if fn(new_obj): ,无需将其作为静态方法。