从变量调用新对象的方法

Call a method on a new object from a variable

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

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

不过好像是hack,不太明白。有人能指出更好的方法吗?

谢谢。

您应该能够像 instance.hof(Cls.flag1) 一样将方法传递给函数,并在内部将其写为 if fn(new_obj):,无需将其设为静态方法。